У меня есть следующая настройка Nginx:
# nginx load balancer
upstream web_app {
server localhost:7021; # nginx1
server localhost:7031; # nginx2
}
server {
listen 7777 ssl;
server_name localhost 0.0.0.0;;
client_max_body_size 25m;
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript application/xml;
gzip_disable "MSIE [1-6]\.";
location / {
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_set_header Host $http_host;
proxy_pass https://web_app;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_connect_timeout 600s;
send_timeout 600s;
}
}
# nginx1
server {
listen 7021 ssl;
server_name localhost 0.0.0.0;
client_max_body_size 25m;
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript application/xml;
gzip_disable "MSIE [1-6]\.";
location / {
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_set_header Host $host;
proxy_pass http://localhost:7001; # process1
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_connect_timeout 600s;
send_timeout 600s;
}
}
# nginx2
server {
listen 7031 ssl;
server_name localhost 0.0.0.0;
client_max_body_size 25m;
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript application/xml;
gzip_disable "MSIE [1-6]\.";
location / {
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_set_header Host $http_host;
proxy_pass http://localhost:7011; # process2
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_connect_timeout 600s;
send_timeout 600s;
}
}
Балансировщик нагрузки имеет восходящую группу, которая снова является процессами Nginx. Каждый процесс Nginx проксирует процесс приложения.
Nginx Load Balancer
/ \
/ \
Nginx1 Nginx2
| |
Process1 Process2
Проблема здесь в том, что даже когда один из процессов не запущен, балансировщик нагрузки отправляет запросы на этот вышестоящий сервер, вызывая проблемы. Я предполагаю, что это происходит, поскольку проверка работоспособности Nginx выполняет проверки только для непосредственно вышестоящего сервера, а не для каких-либо прокси.
т. е. если процесс2 остановлен, балансировщик нагрузки проверяет только работоспособность процесса Nginx на локальном хосте: 7031, а не какие-либо прокси с локального хоста: 7031.
Я хочу, чтобы проверка работоспособности выполнялась на уровне процесса приложения, т.е. @ localhost: 7001 и localhost: 7011.