一般利用nginx做代理,网上搜索的资料均为下面这种方式:
在nginx.conf中
server { listen 80; server_name localhost; root /home/mysite/public_html; location / { index index.html index.htm index.jsp; } location ~ .*.jsp$ { index index.jsp; proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } location ~ \.action$ { proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } location ~ ^/WEB-INF/* { proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
这种方式需要服务器开两个端口,一是80,二是8080。只使用80,只需如下配置,在tomcat下面的的配置中加入address。
<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
这种方式才真正实现了反向代理。
在多站点设置中,可能就不是这种方式,比如有二十个站点,tomcat的端口可能是8001-8020。有些客户的防火墙对上网行为进行了限制。比如,只允许访问外面的80端口,这样就造成了这些站点无法正常访问。
笔者的解决方法:
在网络配置中增加多ip。
linux环境中可以在/etc/sysconfig/network-scripts编写ifcfg-eth0-range0文件,内容如下:
DEVICE=eth0 BOOTPROTO=static BROADCAST=172.16.20.255 HWADDR=00:04:23:C4:9A:0D IPADDR_START=172.16.20.201 IPADDR_END=172.16.20.220 CLONENUM_START=1 NETMASK=255.255.255.0 NETWORK=172.16.20.0 ONBOOT=yes
这样系统启动的时候将产生172.16.20.201-220二十个ip,绑定在eth0。
按http://www.lerx.com/html/2012/03/23/151125393.html的内容进行多站点配置。
将proxy_pass http://localhost:8080;改为:proxy_pass http://172.16.20.(201-220):8080;
在每个站点的Tomcat的conf的server.xml中相应的http端口中加入address=172.16.20.(201-220)。
如:
<Connector port="8005" address="172.16.20.205" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
在各用户站点目录中执行./tomcat.sh stop 再执行./tomcat.sh start重启tomcat即可。
这样,该服务器对外的web端口将只使用80,不再有其它端口。nginx将向IP为172.16.20.(201-220,绑定在本机)的8001-8020的端口发送请求,并返回给自己,然后从80端口返回页面给客户。