客户在布署华丹开发平台时,场景如下: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;

}