Nginx默認反向后的端口為80,因此存在被代理后的端口為80的問題,這就導致訪問出錯。主要原因在Nginx的配置文件的host配置時沒有設置響應的端口。
相關配置文件如下:
proxy_pass http://ime-server/ime-server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如上,Host配置只有host,沒有對應的port,這就導致在被代理的地方取得錯誤的端口。本文以java為例:
String scheme = httpRequest.getScheme(); String serverName = httpRequest.getServerName(); int port = httpRequest.getServerPort(); //服務請求地址 String requestURI = scheme+"://"+serverName+":"+port+"/ime-server/rest/"+serviceName+"/wmts";
這時,取得的port為80,雖然nginx監聽的端口為9090。這個錯誤讓我很郁悶。於是,修改nginx的配置文件,將Host后面的改為 $host:$server_port即可,配置文件如下:
location /ime-server { #root html; #index index.html index.htm; proxy_pass http://ime-server/ime-server; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
重啟nginx,./nginx -s reload 。然后檢查被代理后的端口信息是否正確: