2015-03-30 2 views
1

Мое приложение работает с nginx и uwsgi (python). Моя цель - сбросить соединение (как объяснено here), например. когда приложение python решит это сделать.Перехват восходящей ошибки с nginx

Есть ли параметр nginx для «перехвата» восходящих ошибок, подобных proxy_intercept_errors?

Согласно this answer,

Мой Nginx конфигурации:

location/{ 
    uwsgi_pass    myapp; 
    include     uwsgi_params; 

    uwsgi_buffering   on; 
    uwsgi_buffer_size   8k; 

    uwsgi_connect_timeout  800; 

    uwsgi_read_timeout  800; 
    uwsgi_send_timeout  800; 

    proxy_intercept_errors on; 
    error_page 420 =444 @foo; 
} 

location @foo { 
    return 444; 
} 

Я перепробовал все возможные комбинации я мог думать о с/без proxy_intercept_errors и error_page, но независимо от того, как настроить Nginx, когда я вернусь 420 Enhance your calm (или любой другой код ошибки, по-видимому), он передается непосредственно клиенту.

This answer предлагает использовать proxy_next_upstream, но это подразумевает использование proxy_pass, а не uwsgi_pass. Мне нужно использовать uwsgi_pass, потому что мне нужны определенные параметры, переданные в приложение python.

ответ

3

Получается, что ответ прост, чем я думал, - используйте директиву uwsgi_intercept_errors.

Во-первых, из приложения вверх (в моем случае python) возвращается 444.

Во-вторых, настроить Nginx следующим образом:

location/{ 
    uwsgi_pass    myapp; 
    include     uwsgi_params; 
    [...] 

    uwsgi_intercept_errors on; 
    error_page 444 @drop; 
} 

location @drop { 
    return 444; 
} 
+0

спасибо, это работает :) – Rbeuque74

Смежные вопросы