我有一个通过nginx proxy_pass部署的Node.js Express服务器。我在上游使用loadbalanced的不同端口上有两个并行守护进程。 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;
}
这就是我从Node Express发送错误的方法:
res.status(500).send('The server is not ready yet!');
答案 0 :(得分:1)
当"错误500"时,您必须配置nginx以使用下一个服务器。收到了。
默认情况下,nginx使用下一个服务器"连接错误"并且"超时"只有,所以你必须调整你的配置:
proxy_next_upstream error timeout http_500;
"使用docs,Luke!" http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream