![nginx 中基于 IP 的负载均衡](https://linux22.com/image/888010/nginx%20%E4%B8%AD%E5%9F%BA%E4%BA%8E%20IP%20%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1.png)
我有两个后端服务器在 192.168.0.101:8080 和 192.168.0.102:8080 上运行。
我在 192.168.0.111:80 上运行 nginx,我想强制 nginx 通过 IP 在特定的后端服务器中反转流量。
geo $upstream {
192.168.0.150 backend-1;
192.168.0.250 backend-2;
default backend-1;
}
upstream backend-1 {
ip_hash;
server 192.168.0.101:8080;
}
upstream backend-2 {
ip_hash;
server 192.168.0.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://$upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我对这个配置感到困惑。它会按预期工作吗?除了 192.168.0.150 之外的每个请求都会转到后端 1(192.168.0.102:8080) 吗?192.168.0.250 会转到后端 2 吗?
问题:它没有根据 IP 地址进行重定向。这是为什么?
答案1
工作配置:
geo $upstream {
default backend-1;
192.168.0.150 backend-1;
192.168.0.250 backend-2;
}
upstream backend-1 {
server 192.168.0.101:8080;
}
upstream backend-2 {
server 192.168.0.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://$upstream;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}