Добрый вечер, есть HAProxy в качестве балансера, который слушает порты 80 и 443 и направляет на разные бекенды на nginx'е.
При этом сайты на nginx, видят, что запрос пришел с IP-адреса балансера. И в логах только IP балансера.
Конфиг HAProxy:
[root@140 ~]# cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 10000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#----------------------------------
# Конфигурация фронтенда http
#----------------------------------
frontend http_proxy
bind 192.168.1.140:80
option forwardfor header X-Real-IP
default_backend localhost
# 143.domen.ru
redirect scheme https code 301 if { hdr_end(host) -i 143.domen.ru } !{ ssl_fc }
# 180.domen.ru
acl 180.domen.ru hdr_dom(host) -i 180.domen.ru
use_backend 180.domen.ru if 180.domen.ru
#----------------------------------
# Конфигурация фронтенда https
#----------------------------------
frontend https-in
mode tcp
option tcplog
bind 192.168.1.140:443
option socket-stats
# option forwardfor header X-Real-IP
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
http-request add-header X-Forwarded-Proto https if { ssl_fc }
# 143.domen.ru
use_backend 143.domen.ru if { req_ssl_sni -i 143.domen.ru }
#----------------------------------
# Бекенды
#----------------------------------
backend localhost
server server1 127.0.0.1:8070
# 180.domen.ru
backend 180.domen.ru
server 180.domen.ru 192.168.1.180:80
# 143.domen.ru
backend 143.domen.ru
mode tcp
stick-table type binary len 32 size 30k expire 30m
acl clienthello req_ssl_hello_type 1
acl serverhello rep_ssl_hello_type 2
tcp-request inspect-delay 5s
tcp-request content accept if clienthello
tcp-response content accept if serverhello
stick on payload_lv(43,1) if clienthello
stick store-response payload_lv(43,1) if serverhello
option ssl-hello-chk
server stn_container 192.168.1.143:443
Нашла, что проброс нужно делать опцией
option forwardfor header X-Real-IP
Но она работает только в режиме mode http, а у меня ssl ходит по tcp, сертификаты хранятся на nginx, т.е. HAProxy получает шифрованный запрос, перенаправляет его на бекендный nginx, а nginx уже морочается с сертификатами.
Как тут приделать опцию, чтобы nginx знал ip клиента, а не HAProxy?