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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM