Nginx反向代理实现Tomcat多个应用80端口访问

应用背景

一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://localhost:8081;但是我想通过域名的形式来访问,并且不带端口,比如www.mall.comwww.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参考

springmvc+tomcat+nginx实现单一负载均衡

Nginx+Tomcat多站点访问默认主页问题

Nginx反向代理和负载均衡部署指南

windows下如何安装配置nginx

posted @ 2016-06-21 13:37  i迷倪  阅读(3324)  评论(0编辑  收藏  举报