Haproxy - как сделать реальное отображение IP на бекенде - PROXY protocol
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Haproxy - как сделать реальное отображение IP на бекенде - PROXY protocol
Есть два метода:
1) PROXY protocol 2) Terminate SSL на HAProxy + forwardfor
Делаем первый вариант.
На HAPROXY меняем (добавляем send-proxy-v2):
backend site_com_tls_backend mode tcp server srv_XX_XX_XX_XX XX.XX.XX.XX:443 check на backend site_com_tls_backend mode tcp server srv_XX_XX_XX_XX XX.XX.XX.XX:443 send-proxy-v2 check
На бекенде - nginx (там где 443 порт):
server_name www.site.com; listen XX.XX.XX.XX:443 ssl proxy_protocol; set_real_ip_from <IP_HAProxy>; real_ip_header proxy_protocol; real_ip_recursive on; и server_name site.com; listen XX.XX.XX.XX:443 ssl proxy_protocol; set_real_ip_from <IP_HAProxy>; real_ip_header proxy_protocol; real_ip_recursive on;
<IP_HAProxy> - заменить на свой.
Убедитесь, что в /etc/nginx/proxy_params не захардкожен proxy_set_header X-Real-IP $remote_addr — с proxy_protocol он будет работать корректно (подставлять реальный IP клиента). Логи nginx ($remote_addr) автоматически покажут реальный IP, дополнительных настроек не требуется. С бекенда - nginx: # cat /etc/nginx/proxy_params proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Proto $scheme;
Рестартим и проверяем логи:
Бекенд: # nginx -t && systemctl reload nginx Haproxy: # systemctl reload haproxy
