带有重定向http到https的HAProxy SSL终止将丢失带有send-proxy的X-Client-IP信息到NGINX

问题描述 投票:0回答:1

问题

当我在HAProxy中使用SSL-Termination并强制使用HTTPS时,

我看不到原始的remote-ip来自外部。如果我不强制将HTTP重定向到HTTPS,则从nginx-logs中可以看到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)

然后是来自本地主机(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和NGINX一样都在它自己的lxd容器中!!如果这有什么改变?

这是HAProxy中的配置:

前端80_443_frontend绑定*:80绑定*:443 ssl crt /etc/ssl/git.domain.org/git.domain.org.pem alpn h2,http / 1.1如果!{ssl_fc},则重定向方案https代码301超时客户端1m期权前转选项http-server-closeACL letsencrypt-acl path_beg /。众所周知/ acme-challenge /use_backendletsencrypt_backend,如果letsencrypt-aclacl git_host hdr(host)-i git.domain.org如果git_host,请使用use_backend 80_443_backend后端letsencrypt_backend服务器letencrypt 127.0.0.1:8888后端80_443_backendhttp-request set-header X-Client-IP%[src]服务器git git.lxd:80 send-proxy
ubuntu nginx haproxy lxd
1个回答
0
投票

好吧,把我弄到一边!

需要记住哪些端口转发到了容器!

这是丢失的内容:

sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d PUBLIC_IP/32 --dport 443 -j DNAT --to-destination 10.4.21.53:443
© www.soinside.com 2019 - 2024. All rights reserved.