【发布时间】:2015-04-28 05:10:16
【问题描述】:
我想在几个 node.js 应用节点前面使用 nginx 作为负载均衡器。
round-robin 和 ip_hash 方法非常容易实现,但在我的用例中,它们并不是最合适的。
我需要 nginx 就其会话 ID 为后端节点提供客户端服务,这些会话 ID 由首先登陆的节点提供。
在我的谷歌搜索过程中,我想出了“散列”方法,但我找不到太多资源。
这是我尝试过的:
my_site.conf:
http {
upstream my_servers {
hash $remote_addr$http_session_id consistent;
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 1234;
server_name example.com;
location / {
proxy_pass http://my_servers;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
在应用程序中,我返回带有会话 ID 的 Session-ID 标头。
res.setHeader('Session-ID', req.sessionID);
我错过了什么,但是什么?
【问题讨论】:
-
$http_session_id指的是客户端(浏览器)发送的标头,而不是您的应用程序响应。你需要的是nginx.org/r/sticky,但它只是商业订阅。为什么你不想要简单的 ip_hash? -
是的,在问完这个问题后,我发现了“粘性”模块......但正如你所说,它是商业的:(因为我需要计算不同的客户,即使它们来自同一个 IP .. . 顺便说一句,请添加您的评论作为答案,我会接受它。
标签: node.js nginx load-balancing