ฉันกำลังเรียนรู้วิธีใช้ 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 ไม่รู้จัก ชื่อเซิร์ฟเวอร์
...ข้อมูลนั้นหายไปเมื่อฉันทำการส่งต่อพอร์ตบนเราเตอร์หรือไม่? หรือผมเข้าใจอะไรผิดไป? ฉันจะรับพร็อกซีย้อนกลับด้วยชื่อเซิร์ฟเวอร์เพื่อทำงานกับทราฟฟิกภายนอกในเน็ตเวิร์กที่บ้านของฉันได้อย่างไร