Настраиваем балансировку нагрузки между серверами с nginx с помощью того же nginx на отдельном сервере.
Запускаю балансировщик локально на компе, обращаюсь к 127.0.0.1 — он выдаёт мне разные серверы, как и нужно.
Запускаю балансировщик на сервере — он выдаёт только Welcome to Nginx, когда захожу со своего компа.
Захожу по ssh на сервер с балансирощиком, захожу на 127.0.0.1 — он отдаёт нужные серверы!
Аналогично было с HAProxy, поэтому напрашивается версия, что nginx с приложением неправильно воспринимает запрос, пришедший через балансировщик с другого компа.
Может кто сталкивался с подобным?
Конфиг балансировщика:
upstream http {
server x.x.x.x:80 weight=2 max_fails=2 fail_timeout=4s;
server x.x.x.y:80 weight=2 max_fails=2 fail_timeout=4s;
}
server {
server_name update.xxxx.com 127.0.0.1;
listen 80;
location / {
proxy_read_timeout 1200;
proxy_connect_timeout 1200;
proxy_pass http://http/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Конфиг nginx на сервере приложения:
server {
listen 80;
server_name server01.build.xxxx.com 127.0.0.1;
root /home/user;
charset utf-8;
client_max_body_size 20m;
location /static {
alias /code/front/static;
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30;
proxy_read_timeout 30;
proxy_pass http://server01:8002;
}
}
на
http://server01:8002 — запущен gunicorn c django.