我的应用程序使用nginx和uwsgi(python)运行。我的目标是放弃连接(如here所述),例如当python应用程序决定这样做时。
是否存在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应用程序的某些参数。
答案 0 :(得分: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;
}