Score:0

วิธีตั้งค่า websocket reverse proxy โดยอนุญาตทั้ง proxy_set_header และ SSL

ธง vn

ฉันได้รับโปรเจ็กต์ที่ 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 อย่างพร้อมกันหรือไม่ ขอบคุณที่อ่าน.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา