ВЫПУСК
Я не могу видеть исходный remote-ip , исходящий извне, когда я использую SSL-терминацию в HAProxy и принудительно запускаю HTTPS. Если я не принудительно перенаправляю HTTP на HTTPS, из nginx -logs я вижу, что send-proxy фактически работает с HTTP. То же самое я вижу и в журналах HAProxy.
THEORY
Если я удалю все куки-файлы сайта, выключу перенаправление и открою версию HTTP, HAProxy покажет remote-ip правильно. После переключения перенаправления на HTTPS и открытия того же HTTP-сайта в журналах сначала будет показано соединение с remote-ip к внутреннему:
176.93.182.162:49300 [14/Feb/2020:23:40:30.254] 80_443_frontend 80_443_frontend/(NOSRV)
, а затем соединение с localhost (127.0. 0.1):
127.0.0.1:35304 [14/Feb/2020:23:40:30.776] 80_443_frontend~ 80_443_backend/git 0/0/0/1/1 200
ЗАКЛЮЧЕНИЕ
Я думаю, что HAProxy будет направлять внутренние трафики c из 443 обратно в порт 80 по направлению к бэкэнду, и в в то же время переключите IP заголовка на свой собственный IP. Надеюсь, у кого-нибудь возникнет идея.
HAProxy находится внутри своего собственного контейнера lxd, как и NGINX !! Если это что-то меняет?
Это конфигурация в HAProxy:
frontend 80_443_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/git.domain.org/git.domain.org.pem alpn h2,http/1.1
redirect scheme https code 301 if !{ ssl_fc }
timeout client 1m
option forwardfor
option http-server-close
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt_backend if letsencrypt-acl
acl git_host hdr(host) -i git.domain.org
use_backend 80_443_backend if git_host
backend letsencrypt_backend
server letsencrypt 127.0.0.1:8888
backend 80_443_backend
http-request set-header X-Client-IP %[src]
server git git.lxd:80 send-proxy