การยกเลิก HAProxy SSL ด้วยการเปลี่ยนเส้นทาง http ไปยัง https กำลังสูญเสียข้อมูล X-Client-IP ด้วย send-proxy ไปยัง NGINX

ปัญหา

ฉันไม่เห็น 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


person dicksteel    schedule 15.02.2020    source แหล่งที่มา
comment
นี่มาจากบันทึก HAProxy ที่มีการเปลี่ยนเส้นทาง HTTPS: เชื่อมต่อจาก 127.0.0.1:35314 ถึง 127.0.0.1:443 (80_443_frontend/HTTP)   -  person dicksteel    schedule 15.02.2020
comment
สิ่งนี้มาจากบันทึก HAProxy โดยปิดการเปลี่ยนเส้นทาง HTTP: เชื่อมต่อจาก 176.93.182.162:49651 ถึง 10.4.21.53:80 (80_443_frontend/HTTP)   -  person dicksteel    schedule 15.02.2020


คำตอบ (1)


เอาล่ะ ฉันเกะกะไปข้าง ๆ เลย!

เราต้องจำไว้ว่าพอร์ตใดบ้างที่ส่งต่อไปยังคอนเทนเนอร์!!

นี่คือสิ่งที่ขาดหายไป:

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
person dicksteel    schedule 15.02.2020