應用背景
一般我們在開發時,一個工程里會有多個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參考
