Nginx+Tomcat 真正意义上的反向代理 多站点设置 高级篇
2020-03-19 09:18:57


一般利用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端口返回页面给客户。

发布:lzh