我已经设置了 NGINX 来平衡对我的 Web 应用的请求。一个前端服务器将请求传递给两个后端服务器。一切正常。
但是,我一直在使用 ip_hash 指令来确保用户每次都由同一台服务器提供服务。这似乎不起作用 - 请求在两个后端服务器之间交替,这导致用户会话出现问题。
配置应该很简单,所以我不知道哪里出了问题——任何想法都值得赞赏。
upstream webservers {
ip_hash;
server node1.mysite.com;
server node2.mysite.com;
server localhost:8080 backup;
}
server {
listen 80;
server_name www.mysite.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://webservers;
}
}
答案1
我找到了一种解决方案。
看起来 ip_hash 与备份指令不兼容,并且可能与上游块中的任何其他指令不兼容。
一旦我删除了备份行,ip_hash 就可以正常工作。
但是,这似乎很奇怪。我使用的是最新版本的 NGINX - 1.6 - 但在较新的文档中找不到任何内容表明 ip_hash 和备份指令仍然不兼容。
答案2
backup 将服务器标记为备份服务器。当主服务器不可用时,将转而使用备份服务器的连接。此参数不能与哈希和随机的负载平衡方法。您可以在此链接找到它 http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html