Nginx反向代理实现Tomcat多个应用80端口访问
应用背景
一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://localhost:8081;但是我想通过域名的形式来访问,并且不带端口,比如www.mall.com和www.oms.com的形式来访问我的前台和后台应用,怎么办?如果不考虑端口,那么只需要在Tomcat的server.xml配置文件里配置一下域名,并且在hosts文件里配置一下映射就OK了,但是看着最不爽的就是端口,所以下面我们来把端口干掉。
说明:文章中涉及到的配置皆为本人开发中实际应用,本文中只做举例说明。
第一步:配置hosts文件
添加如下映射
127.0.0.1 oms.com
127.0.0.1 mall.com
127.0.0.1 www.oms.com
127.0.0.1 www.mall.com
第二步:配置Tomcat
1、mall应用服务器配置(只列出关键配置点)
<!-- 端口配置为8080 --> <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<!-- 默认主机配置为www.mall.com --> <Engine defaultHost="www.mall.com" name="Catalina">
<!-- 设置主机名为www.mall.com --> <Host appBase="webapps" autoDeploy="true" name="www.mall.com" unpackWARs="true">
<!-- Context的配置如下,docBase默认,path设置为/ --> <Context docBase="ec-mall-web" path="/" reloadable="true" source="org.eclipse.jst.jee.server:ec-mall-web"/></Host>
2、oms应用服务器配置
<!-- 端口配置为8081 --> <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
<!-- 默认主机配置为www.oms.com --> <Engine defaultHost="www.oms.com" name="Catalina">
<!-- 设置主机名为www.oms.com --> <Host appBase="webapps" autoDeploy="true" name="www.oms.com" unpackWARs="true">
<!-- Context的配置如下,docBase默认,path设置为/ --> <Context docBase="ec-oms-web" path="/" reloadable="true" source="org.eclipse.jst.jee.server:ec-oms-web"/></Host>
第三步:配置Nginx
在nginx.conf配置文件中添加如下两个服务器配置
#配置需要代理的tomcat,可以配置多个服务器,实现负载均衡 upstream mall_proxy{ server www.mall.com:8080; } #虚拟主机:www.mall.com server { listen 80; #监听端口 server_name mall.com www.mall.com; #转发域名,根据该域名规则进行转发,多个用空格隔开 index index.html index.htm index.jsp; #启动页,多个用空格隔开 #网站根目录,这里要按照unix写法,不能这样写E:\Git\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ec-mall-web(注意正反斜杠) #必须跟tomcat中<Context docBase="E:\Git\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ec-mall-web" path="" reloadable="true" source="org.eclipse.jst.jee.server:ec-mall-web"/> #的docBase路径保持一致 root E:/Git/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/ec-mall-web; #目录自动加“/” ,这个功能一般浏览器自动完成 if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; } # 动态页面,交给tomcat处理 location / { #设置主机头和客户端真实地址,以便服务器获取客户端真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #禁用缓存 proxy_buffering off; #反向代理的地址 proxy_pass http://mall_proxy; } }
upstream oms_proxy{ server www.oms.com:8081; } #虚拟主机:www.oms.com server { listen 80; server_name oms.com www.oms.com; index index.html index.htm index.jsp; root E:/Git/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ec-oms-web; if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_pass http://oms_proxy; } }
附录:Nginx下载及启动、重启、关闭命令
nginx下载地址:http://nginx.org/en/download.html
下载后解压到D盘(当然也可以是其他盘),比如我是解压到d:\nginx
打开命令窗口,cd到nginx解压目录
>>d:
>>cd nginx
启动nginx
>>start nginx
重启nginx
>>nginx –s reload
停止nginx
>>nginx –s stop
或
>>nginx –s quit
附录:Nginx参考