Назад | Перейти на главную страницу

Nginx ip_hash за прокси (Cloudflare)

Мы используем 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;

https://support.cloudflare.com/hc/en-us/articles/200170706-Does-CloudFlare-have-an-IP-module-for-Nginx-

В качестве альтернативы методам, предложенным в этой теме hash директиву можно использовать для построения хеш-таблицы из любой переменной, в нашем случае $http_cf_connecting_ip заголовок.

upstream backend {
  hash $http_cf_connecting_ip;
}