Score:0

nginx reverse proxy สำเร็จในเครือข่ายท้องถิ่น แต่ล้มเหลวในเครือข่ายสาธารณะ

ธง gi

ฉันกำลังเรียนรู้วิธีใช้ reverse proxy ตามชื่อเซิร์ฟเวอร์ด้วย nginx ฉันมีทุกอย่างเพื่อให้ทำงานได้อย่างสมบูรณ์ 100% ในเครือข่ายโฮมออฟฟิศ แต่เมื่อฉันเปิดไฟร์วอลล์ที่บ้านและพอร์ตส่งต่อทราฟฟิกภายนอกไปยังเซิร์ฟเวอร์พร็อกซีย้อนกลับในบ้านของฉัน มันเหมือนกับว่า nginx ไม่รู้จักกฎชื่อเซิร์ฟเวอร์ และใช้กฎเริ่มต้นต่อไป คำถามของฉันคือ ฉันจะรับ reverse proxy ด้วยชื่อเซิร์ฟเวอร์เพื่อทำงานกับทราฟฟิกภายนอกได้อย่างไร

เพื่ออธิบายสิ่งที่ฉันหมายถึง ฉันจะแสดง สถานการณ์ความสำเร็จ และ สถานการณ์ล้มเหลว.

สถานการณ์ความสำเร็จ - ย้อนกลับพร็อกซีของการรับส่งข้อมูลเครือข่ายภายในบ้าน

สถานการณ์นี้ทำงานได้อย่างสมบูรณ์ ฉันมีคอมพิวเตอร์ในบ้านของฉัน คอมพิวเตอร์มีที่อยู่ IP 192.168.0.30 คอมพิวเตอร์ติดตั้ง nginx แล้ว จากนั้นฉันก็เพิ่มบันทึกทั้งสองนี้ลงในของฉัน / etc / โฮสต์

192.168.0.31 home1.john.com
192.168.0.32 home2.john.com

จากนั้นฉันก็เพิ่มสิ่งนี้ลงในของฉัน /etc/nginx/nginx.conf

ลำธาร {
    รวม stream_conf.d/*.conf;
}

จากนั้นฉันก็ทำไฟล์นี้ /etc/nginx/stream_conf.d/*.conf:

log_format mqtt '$remote_addr [$time_local] $โปรโตคอล $สถานะ $bytes_received'
                '$bytes_sent $upstream_addr';

แผนที่ $ssl_preread_server_name $name {
    home1.john.com hive_mq;
    home2.john.com hive_mq2;
    hive_mq เริ่มต้น;
}

ต้นน้ำ hive_mq {
    เซิร์ฟเวอร์ 192.168.0.31:1883;
    โซน tcp_mem 64k;
}

ต้นน้ำ hive_mq2 {
    เซิร์ฟเวอร์ 192.168.0.32:1883;
    โซน tcp_mem 64k;
}

เซิร์ฟเวอร์ {
    ฟัง 2426;
    proxy_pass $ชื่อ;
    proxy_connect_timeout 1 วินาที;

    ssl_preread บน;
    access_log /var/log/nginx/mqtt_access.log mqtt;
    error_log /var/log/nginx/mqtt_error.log;
}

จากนั้นฉันรันคำสั่งเหล่านี้:

nginx # เริ่มทำงาน nginx
nginx -s reload # ตรวจสอบให้แน่ใจว่าฉันใช้ไฟล์ conf ล่าสุด

mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # 192.168.0.31 ได้รับข้อความสำเร็จ และ 192.168.0.32 ละเว้นข้อความนี้ได้สำเร็จ
mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # 192.168.0.32 ได้รับข้อความสำเร็จและ 192.168.0.31 เพิกเฉยได้สำเร็จ

ทุกอย่างสมบูรณ์แบบ

FAIL SCENARIO - ย้อนกลับพร็อกซีของทราฟฟิกภายนอก

ฉันไปที่เราเตอร์ WiFi และเปิดใช้งานการส่งต่อพอร์ต ฉันจะรับทราฟฟิกภายนอกจากพอร์ต 1883 และส่งต่อไปยังที่อยู่ IP 192.168.0.30 (คอมพิวเตอร์พร็อกซีย้อนกลับของฉันที่มี nginx อยู่) ที่พอร์ต 1883

จากนั้นฉันก็ขับรถไปที่บ้านเพื่อนและเอาแล็ปท็อปของเขาไป ฉันเพิ่มบันทึกทั้งสองนี้ลงในแล็ปท็อปของเขา / etc / โฮสต์ ไฟล์:

# สมมติว่า 72.142.34.203 เป็นที่อยู่ IPv4 สาธารณะที่บ้านของฉัน
72.142.34.203 home1.john.com
72.142.34.203 home2.john.com

จากนั้นฉันก็รันคำสั่งเหล่านี้บนแล็ปท็อปของเขา:

mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # 192.168.0.31 ได้รับข้อความสำเร็จ และ 192.168.0.32 ละเว้นข้อความนี้ได้สำเร็จ

mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # INCORRECT OUTCOME - 192.168.0.31 ได้รับข้อความนี้ และ 192.168.0.32 ไม่ได้รับข้อความนี้

เหตุใด 192.168.0.32 จึงไม่สามารถรับไฟล์ ทดสอบกับเซิร์ฟเวอร์ home2.john.com จากคำสั่งที่สอง? เหมือนกับว่า nginx reverse proxy ไม่รู้จัก ชื่อเซิร์ฟเวอร์...ข้อมูลนั้นหายไปเมื่อฉันทำการส่งต่อพอร์ตบนเราเตอร์หรือไม่? หรือผมเข้าใจอะไรผิดไป? ฉันจะรับพร็อกซีย้อนกลับด้วยชื่อเซิร์ฟเวอร์เพื่อทำงานกับทราฟฟิกภายนอกในเน็ตเวิร์กที่บ้านของฉันได้อย่างไร

โพสต์คำตอบ

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