ПРОБЛЕМА
Я не вижу исходный remote-ip, исходящий извне, когда я использую SSL-Termination в HAProxy и принудительно использую HTTPS. Если я не принудительно перенаправляю HTTP на HTTPS, я могу видеть из журналов nginx, что send-proxy действительно работает с HTTP. То же самое я вижу и в журналах HAProxy.
ТЕОРИЯ
Если я удалю все файлы cookie сайта, отключу перенаправление и открою версию 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 будет направлять внутренний трафик с 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