Патч Nginx для ip_hash 4 октета вместо 3

В настоящее время я запускаю два back-end сервера в своей сети и балансировку нагрузки с помощью Nginx в Windows.

В настоящий момент я тестирую нагрузку на систему, но весь мой трафик направлен на один сервер. Это связано с тем, что алгоритм ip_hash сортирует трафик на первые 3 октета, то есть 111.222.333.XXX

Это проблема, потому что весь трафик, на который я нацеливаюсь на сервер, имеет тот же базовый адрес (те же первые 3 октета), поэтому ни один из моих трафик не идет на другой сервер. Кто-нибудь знает способ исправления или изменения алгоритма ip_hash для фильтрации через 4 октета.

Спасибо

1 ответ

Версия с открытым исходным кодом Nginx поддерживает директиву hash, которая может работать аналогично (не совсем точно) с механизмом липкого сеанса, предоставляемым коммерческой версией:

Общий хэш-метод: сервер, на который отправлен запрос, определяется из пользовательского ключа, который может быть текстом, переменной или их комбинации. Например, ключ может быть источником IP и портом, или URI:

upstream backend {
 hash $request_uri consistent;
 server backend1.example.com;
 server backend2.example.com;
}

https://www.nginx.com/resources/admin-guide/load-balancer/

Итак, как вы используете 4 октета из IPv4 с хэш-методом? Давайте узнаем, как получить IP-адрес клиента из раздела Embedded Variables http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

$адрес клиента remote_addr

Итак, код выглядит так:

upstream backend {
 hash $remote_addr consistent;
 server backend1.example.com;
 server backend2.example.com;
}

ОБНОВЛЕНИЕ:

Если взглянуть на модуль Stream (прокси TCP), то в самом первом примере показан тот же подход:

upstream backend {
 hash $remote_addr consistent;
 server backend1.example.com:12345 weight=5;
 server backend2.example.com:12345;
 server unix:/tmp/backend3;
}
server {
 listen 12346;
 proxy_pass backend;
}

licensed under cc by-sa 3.0 with attribution.