天天看點

外網映射nginx端口丢失問題解決一.背景:二.問題分析三.問題解決四.後記

一.背景:

    nginx監聽8082端口,2個tomcat分别為8180和8280,外網映射端口為13410。

    實際的通路位址有2個,内網是http://10.130.0.250:8082/jwell-km-client,外網是http://221.xxx.162.xxx:13410/jwell-km-client。

    節點1内網直接通路位址為http://10.130.0.250:8180/jwell-km-client。節點2内網直接通路位址為http://10.130.0.250:8280/jwell-km-client。

    正常直接通路位址1,會被Redirect一次,位址為http://10.130.0.250:8180/jwell-km-client/home/login。

    當預設簡單配置了代理後,内網通路正常

外網映射nginx端口丢失問題解決一.背景:二.問題分析三.問題解決四.後記

但是,外網通路把端口給我修改了,導緻通路異常:

外網映射nginx端口丢失問題解決一.背景:二.問題分析三.問題解決四.後記

二.問題分析

    百度了很久,也看了官方文檔。整體原因是外網映射了一次,在跳轉的時候,丢失了外網映射通路的端口,預設添加的是nginx監聽的端口。端口不對了,就通路失敗了。内網通路添加内網的端口,本身能通路就沒有問題。

三.問題解決

解決思路是當外網映射的時候,把端口給他修改正确就好了。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream services {
	    server 127.0.0.1:8180;
	    server 127.0.0.1:8280;
	}
    server {
        listen       8082;
        server_name  localhost;
#關鍵配置來了
port_in_redirect on;
proxy_redirect http://221.xxx.162.xxx/ http://221.xxx.162.xxx:13410/;
proxy_redirect http://10.130.0.250/ http://10.130.0.250:8082/;
proxy_set_header  Host $host:$proxy_port;  
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#就是上面這些關鍵的了
	location / {
            proxy_pass  http://services;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
           

最後解決的結果是:

外網正常

外網映射nginx端口丢失問題解決一.背景:二.問題分析三.問題解決四.後記

内網正常

外網映射nginx端口丢失問題解決一.背景:二.問題分析三.問題解決四.後記

四.後記

暫時配置了2個proxy_redirect,分别把沒有端口的内網和外網給添加上了對應的端口。算是臨時解決的方法。下次還要寫curl,哈哈!

參考了

http://nginx.org/en/docs/

http://tengine.taobao.org/nginx_docs/cn/docs/

https://blog.rj-bai.com/post/77.html

https://blog.csdn.net/juncke/article/details/52539175

繼續閱讀