lor*_*zog 1 nginx http-error uwsgi
我的应用程序使用 nginx 和 uwsgi (python) 运行。我的目标是要断开连接(如解释在这里),例如,当Python应用程序决定这样做。
是否有一个 nginx 参数来“拦截”类似的上游错误proxy_intercept_errors
?
根据这个答案,
我的 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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的组合,我可以想到有/没有proxy_intercept_errors
,error_page
但无论我如何配置 nginx,当我返回420 Enhance your calm
(或任何其他错误代码,显然)时,它都会直接传递给客户端。
这个答案建议使用,proxy_next_upstream
但这意味着使用proxy_pass
而不是uwsgi_pass
. 我需要使用,uwsgi_pass
因为我需要将某些参数传递给 python 应用程序。
事实证明,答案比我想象的要简单 - 使用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;
}
Run Code Online (Sandbox Code Playgroud)