Я использую NGINX в качестве балансировщика нагрузки для запуска нескольких экземпляров моего сайта. Я работаю над условной маршрутизацией для отправки пользователей на определенные серверы на основе входящего HTTP-заголовка. Конечная цель - иметь бета-версию восходящего потока с X-серверами с балансировкой нагрузки с использованием ip_hashing для отправки пользователям, у которых есть флаг бета-тестера, и стабильный восходящий поток с Y-серверами для тех, кто не выбрал.
Моя проблема связана с переключением из одной группы в другую - в частности, бета-пользователей следует перенаправить на стабильные серверы, если бета-серверы недоступны. К сожалению, ни директивы резервного копирования, ни веса не работают в восходящем потоке ip_hashed, несмотря на то, что текущая документация NGINX, похоже, указывает, что они должны работать.
В качестве обходного пути я пытаюсь создать настраиваемое местоположение ошибки для ошибок 502 и 504, которое выполняет proxy_pass для моего стабильного восходящего потока. Однако, когда я тестирую свою конфигурацию, я обнаруживаю, что страница пуста с заголовком 504 и без перенаправления. Основывая свое текущее решение на этом потоке:
worker_processes 2;
events {
worker_connections 1024;
}
http {
upstream dataserver_stable {
ip_hash;
server localhost:8081;
}
upstream dataserver_beta {
ip_hash;
server localhost:8082 fail_timeout=1m;
#server localhost:8081 backup; # backup and weight aren't working with the ip_hash directive
}
geo $beta_user {
default stable;
10.17.12.246 beta;
}
map $beta_user $upstream {
stable dataserver_stable;
beta dataserver_beta;
}
server {
listen 81;
server_name localhost;
set_real_ip_from 27.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location / {
error_page 502 504 @fallback;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $realip_remote_addr;
proxy_pass http://$upstream;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
}
location @fallback {
proxy_pass http://dataserver_stable;
}
}
}
Любой совет будет принят во внимание.