如何使用 Node.js Express 强制 nginx proxy_next_upstream

How to force nginx proxy_next_upstream with Node.js Express?

本文关键字:proxy next upstream nginx 强制 何使用 Node js Express      更新时间:2023-09-26

我有一个通过nginx proxy_pass部署的Node.js Express服务器。我有两个平行守护进程在不同的端口上使用上游进行负载平衡。Express 服务器的初始化需要时间,因此我发送错误 500,直到它准备就绪。我希望nginx使用另一个上游服务器,直到第一个服务器准备就绪,反之亦然。

我尝试使用proxy_next_upstream,但它效果不佳。始终至少向用户显示一个错误 500。

也许原因隐藏在nginx doc的以下句子中:"应该记住,只有在尚未向客户端发送任何内容的情况下,才有可能将请求传递给下一个服务器。

以下是proxy_pass配置:

proxy_pass   http://node_servers ;
proxy_set_header Host $http_host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_read_timeout 60;  proxy_connect_timeout 60;

这些是上游:

upstream node_servers {
    server 127.0.0.1:12005;
    server 127.0.0.1:12006;
}

这就是我从节点快递发送错误的方式:

res.status(500).send('The server is not ready yet!');

您必须将nginx配置为在收到"错误500"时使用下一个服务器。

默认情况下,nginx仅在"连接错误"和"超时"时使用下一个服务器,因此您必须调整配置:

   proxy_next_upstream error timeout http_500;

"使用文档,卢克!"http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream