Điểm:0

nginx reverse proxy success in local network but failure in public network

lá cờ gi

I'm learning how to use reverse proxy based on server names with nginx. I got everything to work 100% perfectly in home office network. But when I open up my home's firewall and port-forward external traffic to my reverse proxy server in my house, it's like nginx doesn't recognize the server name rules, and keeps using the default rule. So my question is, how do I get reverse proxy with server names to work with external traffic?

To describe what I mean, I will show a Success Scenario and the Failed Scenario.

SUCCESS SCENARIO - Reverse Proxy Of Home Network Traffic

This scenario works perfectly. I have a computer in my house. The computer has IP address of 192.168.0.30. THe computer has nginx installed. Then I added these two records to my /etc/hosts

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

Then I added this to my /etc/nginx/nginx.conf

stream {
    include stream_conf.d/*.conf;
}

Then I made this file /etc/nginx/stream_conf.d/*.conf:

log_format mqtt '$remote_addr [$time_local] $protocol $status $bytes_received '
                '$bytes_sent $upstream_addr';

map $ssl_preread_server_name $name {
    home1.john.com      hive_mq;
    home2.john.com      hive_mq2;
    default             hive_mq;
}

upstream hive_mq {
    server 192.168.0.31:1883;
    zone tcp_mem 64k;
}

upstream hive_mq2 {
    server 192.168.0.32:1883;
    zone tcp_mem 64k;
}

server {
    listen 1883;
    proxy_pass $name;
    proxy_connect_timeout 1s;

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

Then I run these commands:

nginx # starts up nginx
nginx -s reload # make sure I am using the latest conf files

mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # The 192.168.0.31 successfully receives the message, and 192.168.0.32 successfully ignores this message
mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # The 192.168.0.32 successfully receives the message, and 192.168.0.31 successfully ignores

Everything is absolutely perfect.

FAIL SCENARIO - Reverse Proxy Of External Traffic

I went to my WiFi router and enabled port forwarding. I will take any external traffic from port 1883 and forward it to the IP address 192.168.0.30 (my reverse proxy computer with nginx on it) on port 1883.

Then I drove my car to my friend's house and took his laptop. I added these two records to his laptop's /etc/hosts file:

# assume 72.142.34.203 is my home public ipv4 address
72.142.34.203 home1.john.com
72.142.34.203 home2.john.com

Then I ran these commands on his laptop:

mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # The 192.168.0.31 successfully receives the message, and 192.168.0.32 successfully ignores this message

mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # INCORRECT OUTCOME - The 192.168.0.31 received this message, and 192.168.0.32 did not get this message

Why did 192.168.0.32 fail to get the test to home2.john.com server from the second command? It's as if the nginx reverse proxy doesn't recognize the server_name...is that information lost when I did port forwarding on my router? Or have I mis-understood something? How do I get reverse proxy with server name to work with external traffic into my home netowrk

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.