一.背景:
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監聽的端口。端口不對了,就通路失敗了。内網通路添加内網的端口,本身能通路就沒有問題。
三.問題解決
解決思路是當外網映射的時候,把端口給他修改正确就好了。
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;
}
}
}
最後解決的結果是:
外網正常
内網正常
四.後記
暫時配置了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