Балансировка нагрузки на основе IP в nginx
У меня есть два Backend сервера, работающие на 192.168.0.101:8080 и 192.168.0.102:8080.
У меня nginx работает на 192.168.0.111:80, я хочу заставить 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, переходить на backend-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;
}
}