配置 nginx 重试单个上游服务器

Joh*_*ohn 13 nginx

我使用 nginx 作为反向代理,如果上游服务器没有响应,我希望它等待几秒钟并重试请求。这样我就可以重新启动我的上游服务器,而不是用户看到 502 bad gateway,他们的浏览器只挂了几秒钟(重新启动过程需要 3 或 4 秒)。我尝试了几件事,我把它放在我的服务器块中:

proxy_connect_timeout 60;
proxy_send_timeout 15;
proxy_read_timeout 20;
Run Code Online (Sandbox Code Playgroud)

但它似乎没有做任何事情。我还尝试将其添加到上游块:

server 127.0.0.1:3001 fail_timeout=10s;
Run Code Online (Sandbox Code Playgroud)

再次,不是我想要的。

这可能吗?我错过了什么?

Ber*_*set 1

您尝试的指令的用途与您希望的不同。阅读他们的文档。

指令upstream文档彻底解释了上游块的工作原理:

如果在与服务器通信期间发生错误,请求将被传递到下一个服务器,依此类推,直到尝试所有正常运行的服务器。如果无法从任何服务器获得成功响应,客户端将收到与最后一个服务器通信的结果。

一切都在那里说。

但是,您可以通过拦截后端返回的错误代码来处理它proxy_intercept_errors,然后将其发送$request_uri到代表原始客户端处理它的特殊脚本。

基线是:您需要一些代码/应用程序逻辑来重试客户端(或前端)。

  • 我不会告诉任何人阅读答案中的文档。我什至不确定我是否想阅读答案的其余部分,即使它可能有帮助。 (3认同)