cloudflare haproxy real-ip

cloudflare haproxy real-ipПривет, днес пуснах отново блога да върви през cloudflare. Бях го спрял защото 1 година използвах SSL сертификат от GoDaddy заради SPDY но серфитиката изтече, а и цената му вече беше доста по-висока от когато го бях закупил. И така реших отново да пусна трафика да минава през cloudflare защото в крайна сметка използвам само 80 порт.

Тъй като от поста ми за SPDY писан през септември 2012-та година много вода е изтекла, и промените по инфраструктурата на сървърите ми са доста – а именно вече използвам HAProxy за load balancer + още много много благинки. Тук идва и проблема на който знаех че ще се натъкна след като включа cloudflare – а именно грешните айпи адреси в логовете. Проблема е че в конфигурационния файл на HAProxy съм добавил опцията :

option forwardfor

Тя позволява реалните айпи адреси на посетителите на сайта да бъдат препращани към уеб сървъра (nginx) в който съответно също са добавени опциите:
set_real_ip_from   192.168.1.1; # това е вътрешното айпи на HAProxy сървъра
real_ip_header X-Forwarded-For;

Но след като съм включил cloudflare, е небходимо да заменя “real_ip_header X-Forwarded-For;” със “real_ip_header CF-Connecting-IP;” и да добавя айпи адресите на CloudFlare от https://www.cloudflare.com/ips-v4

Всичко хубаво, но не се получи желаният от мен резултат. 🙂
В крайна сметка реших проблема , след като добавих опцията :

option httpclose

в haproxy.cfg за даденият backend.
Така конфигурационният файл за backend-a на блога вече изглежда така:
backend friendbg.net
cookie SERVERID insert indirect
balance roundrobin
option httpclose
server web1 192.168.1.31:80 cookie web1 check inter 2000 rise 2 fall 5
server web2 192.168.1.32:80 cookie web2 check inter 2000 rise 2 fall 5
server web3 192.168.1.33:80 cookie web3 check inter 2000 rise 2 fall 5

И nginx конфига на friendbg.net изглежда така:
#cloudflare
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 192.168.1.1;
real_ip_header CF-Connecting-IP;

Така вече всичко работи както исках, вече виждам реалните айпи адреси на посетителите на блога + трафика на сайта минава през cloudflare. Това е..