客户在布署华丹开发平台时,场景如下:nginx反向代理tomcat集群,nginx采用80端口,tomcat用8080、8081端口。而后经路由器将端口80映射为外网端口8000(80其它业务系统占用)。
因路由器二次转发的端口与nginx不同,导致Tomcat无法正确访问。此时可以在nginx配置文件中对应的location段内找到:
proxy_set_header Host $host:$proxy_port;
虽然可以将$proxy_port修改成路由器映射的外网访问端口值(如8000),可以正常访问,但是这样会带来另一个问题,就是只能通过的外网路由器映射的端口访问。如果在局域网中通过服务器本地IP:nginx端口(80)访问就会有问题。
因此将Host值修改成$http_host即可达到效果。
proxy_set_header Host $http_host;
完整配置如下:
location ~* \.(jsp|do|action)$
{
# 真实的客户端IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
# 请求头中Host信息
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;#$proxy_add_x_forwarded_for;
# 真实的用户访问协议
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://webserver;
expires -1;
}