ปัญหา
ฉันไม่เห็น remote-ip ดั้งเดิมที่มาจากภายนอก เมื่อฉันใช้การสิ้นสุด SSL ใน HAProxy และบังคับใช้ HTTPS หากฉันไม่บังคับให้เปลี่ยนเส้นทาง HTTP ไปเป็น HTTPS ฉันจะเห็นได้จากบันทึก nginx ว่า send-proxy นั้นใช้งานได้จริงกับ HTTP ฉันสามารถเห็นสิ่งเดียวกันจาก HAProxy-logs เช่นกัน
ทฤษฎี
หากฉันลบคุกกี้ทั้งหมดของไซต์ ปิดการเปลี่ยนเส้นทางและเปิดเวอร์ชัน 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