问题
当我在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
好吧,把我弄到一边!
需要记住哪些端口转发到了容器!
这是丢失的内容:
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