ฉันได้รับโปรเจ็กต์ที่ websocket reverse-proxy ภายนอกถูกใช้งานโดยสตรีม nginx
อย่างไรก็ตาม Steam หมายถึง "TCP" เท่านั้นและสูญเสียคุณสมบัติ http เช่นการเขียนเส้นทางของ IP เพียงอย่างเดียว
นี่คือการกำหนดค่าของชั้นนอกใน SSL ที่เข้ารหัส:
ลำธาร{
ต้นน้ำ mysvr {
เซิร์ฟเวอร์ 10.3.3.7:1111;
}
เซิร์ฟเวอร์ {
ฟัง 3331;
ssl_preread บน;
# proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_pass mysvr;
}
......
เดอะ proxy_set_header
ต้องแสดงความคิดเห็นในข้อเนื่องจาก nginx ไม่อนุญาตที่นี่หากไม่:
ไม่อนุญาตให้ใช้คำสั่ง "proxy_set_header" ที่นี่
และนี่คือการกำหนดค่าของ nginx บนเครื่อง 10.3.3.7:
http{
เซิร์ฟเวอร์ {
ฟัง 1111 ssl;
server_name localhost;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
ssl_session_timeout 5 นาที;
ปิด ssl_verify_client;
ที่ตั้ง / {
proxy_pass http://10.3.3.5:8888;
proxy_http_version 1.1;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ "อัพเกรด";
}
......
ดังนั้นฉันจึงพยายามเขียนพร็อกซีย้อนกลับแรกและภายนอกใหม่เป็นประเภท http 1.1 ซึ่งเป็นพร็อกซี websocket จริงแทนการเชื่อมต่อ TCP หรือ "สตรีม" ฉันย้ายทุกอย่างออกจาก ลำธาร
วงเล็บและใส่เข้าไป http
วงเล็บและลบความคิดเห็นก่อนหน้า proxy_set_header
สุดท้ายเพิ่มคำสั่งเฉพาะของ websocket สามรายการที่ส่วนท้ายของพร็อกซีย้อนกลับที่สองและภายใน:
http {
ต้นน้ำ mysvr {
เซิร์ฟเวอร์ 10.3.3.7:1111;
}
เซิร์ฟเวอร์ {
ฟัง 3331;
ssl_preread บน;
proxy_set_header โฮสต์ $http_host;
proxy_http_version 1.1;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ "อัพเกรด";
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_pass mysvr;
}
......
แต่คราวนี้ nginx เกิดข้อผิดพลาด:[emerg] ไม่อนุญาตให้ใช้คำสั่ง "ssl_preread"
ดังนั้นความขัดแย้งคือ:
ภายใต้ไอน้ำฉันไม่สามารถใช้ proxy_set_header
;
ในขณะที่อยู่ภายใต้ http 1.1 ฉันไม่สามารถใช้ ssl_preread
.
แต่ทั้งสองเป็นคุณสมบัติที่สำคัญในสถานการณ์นี้:
เซิร์ฟเวอร์ส่วนหลังจริงจำเป็นต้องรู้ IP ของลูกค้าจริง ดังนั้นจำเป็นต้องประทับ IP ที่เซิร์ฟเวอร์ภายนอกลงในส่วนหัว
พร็อกซีเซิร์ฟเวอร์ภายนอกไม่ได้รับอนุญาตให้อ่านทราฟฟิกทราฟฟิก แต่อนุญาตให้พร็อกซีย้อนกลับภายในถอดรหัสด้วย SSL ดังนั้นทราฟฟิกระหว่างแบ็กเอนด์จริง 10.3.3.5 และ reverse-proxy 10.3.3.7 ภายในจึงโปร่งใส ในขณะที่ทราฟฟิกจาก reverse-proxy ภายในผ่าน reverse-proxy ภายนอกไปยังไคลเอ็นต์จะถูกเข้ารหัสด้วย SSL เดียวกันโดย nginx บนอินเนอร์รีเวิร์ส -ผู้รับมอบฉันทะ
คุณสมบัติเพิ่มเติมคือแบ็คเอนด์จริง 10.3.3.5 กำหนดเส้นทางผ่าน 10.3.3.7 พร็อกซีย้อนกลับภายใน ซึ่งกำหนดเส้นทางผ่านพร็อกซีย้อนกลับภายนอก ดังนั้นเส้นทางพร็อกซี VPN และเส้นทางพร็อกซีย้อนกลับจึงสอดคล้องกัน
ภายใต้การตั้งค่านี้ มีวิธีใดที่จะบรรลุคุณสมบัติ 2 อย่างพร้อมกันหรือไม่
ขอบคุณที่อ่าน.