用nginx截获上游错误

我的应用程序运行nginxuwsgi(python)。 我的目标是放弃连接(如此处所述),例如,当python应用程序决定这样做时。

是否有一个nginx参数来“拦截”类似于proxy_intercept_errors上游错误?

根据这个答案 ,

我的nginxconfiguration:

 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_errorserror_page但无论如何configurationnginx,当我返回时,都会420 Enhance your calm (或者其他任何错误代码,显然)直接传递给客户端。

这个答案build议使用proxy_next_upstream但这意味着使用proxy_pass而不是uwsgi_pass 。 我需要使用uwsgi_pass因为我需要传递给python应用程序的某些参数。

事实证明,答案比我想象的要简单 – 使用uwsgi_intercept_errors指令。

首先,从上游应用程序(在我的情况下蟒蛇)返回444

其次,配置nginx如下:

 location / { uwsgi_pass myapp; include uwsgi_params; [...] uwsgi_intercept_errors on; error_page 444 @drop; } location @drop { return 444; }