ฉันใช้โมดูลสตรีมเพื่อส่งผ่านทราฟฟิก tls โดยที่ฉันไม่สามารถย้อนกลับพร็อกซีได้ เช่น เพราะฉันไม่มีใบรับรอง (การติดตั้ง 3CX ในเครื่อง) หรือทำให้สิ่งต่าง ๆ เสียหาย (ssl vpn พร้อมใบรับรองไคลเอนต์)
จากนั้นฉันส่งต่อ "ส่วนที่เหลือ" ไปยัง IP อื่นบนโฮสต์เดียวกัน (127.0.0.1) สำหรับการย้อนกลับพร็อกซี
ปัญหาคือ remote_addr ไม่ใช่ 127.0.0.1 เสมอไป และดูเหมือนจะไม่มีวิธีตั้งค่าที่อยู่ระยะไกล "จริง"
เพื่อหลีกเลี่ยงสิ่งนี้ ฉันเปิดใช้งาน proxy_protocol และใช้ $proxy_protocol_addr
อย่างไรก็ตามสิ่งนี้ทำให้เว็บไซต์ passthrough ทั้งหมดแตกและฉันไม่พบวิธีเปิดใช้งาน proxy_protocol แบบมีเงื่อนไขสำหรับ "ค่าเริ่มต้น" เท่านั้น
ฉันทำทั้งหมดนี้เพื่อให้จับคู่กับ sni และใช้ IP เดียวสำหรับทุกเว็บไซต์
ฉันไม่ยึดติดกับวิธีการนี้อย่างแน่นอน ถ้าใครมีความคิดวิธีการบรรลุสิ่งนี้ด้วยวิธีที่แตกต่าง/ดีกว่า ฉันยินดีรับฟัง
ลำธาร {
แผนที่ $ssl_preread_server_name $targetBackend {
3cx.example.com 192.168.1.2:443;
vpn.example.com 192.168.1.3:443;
ค่าเริ่มต้น 127.0.0.1:443;
}
เซิร์ฟเวอร์ {
ฟัง 192.168.1.100:443;
proxy_connect_timeout 1;
proxy_timeout 3 วินาที;
ตัวแก้ไข 192.168.1.1;
proxy_protocol บน;
proxy_pass $targetBackend;
ssl_preread บน;
}
ดังนั้น ... วิธีทำให้ proxy_protocol มีเงื่อนไข (afaik หากใช้งานไม่ได้ในบริบทของสตรีม) หรือแก้ไขด้วยวิธีอื่น