Мы используем nginx для балансировки нагрузки, и нам нужен ip_hash, чтобы гарантировать нормальную работу нашего сервера.
Когда мы начали использовать cloudflare, большинство наших запросов отправлялись на один сервер, поскольку казалось, что все они идентифицируются только по IP-адресу cloudflare. Мы хотели бы лучше сбалансировать его, и было бы хорошо, чтобы ip_hash использовал заголовок CF-Connecting-IP, который cloudflare помещает в запросы.
Кто-нибудь знает, как это сделать?
upstream backend {
ip_hash;
#proxy_next_upstream_timeout 30;
server localhost:8080 max_fails=2 fail_timeout=180;
server somethign:8080 ;
server something2:8080;
}
Cloudflare имеет эти диапазоны ip, вы можете использовать встроенный nginx модуль real_ip и правильно настроить заголовки https://www.cloudflare.com/ips
set_real_ip_from 204.93.240.0/24;
real_ip_header CF-Connecting-IP;
В качестве альтернативы методам, предложенным в этой теме hash
директиву можно использовать для построения хеш-таблицы из любой переменной, в нашем случае $http_cf_connecting_ip
заголовок.
upstream backend {
hash $http_cf_connecting_ip;
}