我的应用程序运行nginx和uwsgi(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_errors
和error_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; }