天天看點

多個tomcat 多個域名

 在實際的生産環境中,經常會遇到同一台伺服器部署多個JSP應用的情況,為了友善維護和管理,通常會裝多個Tomcat,每個Tomcat隻部署一個JSP應用(當然,一個Tomcat同樣可以部署多個JSP應用,但是單獨維護個别應用就很不友善了,而且它們使用的jar包也不盡相同,容易出現沖突),這就要求每一個Tomcat都啟用各自唯一的端口。我們都知道通過域名通路主機的時候預設都是80端口(可以省略不寫),但是如果開啟的是其他端口,就必需在域名後指定(如:www.opseye.com:8080)才能通路伺服器應用。這樣問題就來了,我們不可能把每一個Tomcat都配置成80端口,是以這裡就需要使用Nginx或Apache等web伺服器軟體給Tomcat做反向代理來解決,這樣不但解決了域名通路需要加端口号的問題,還能實作動靜态頁面分離技術。都知道Tomcat處理靜态頁面的能力很差,正好,把不擅長做的交給Nginx來做吧,Nginx可是這方面的專家。

本文提綱:1,環境介紹2,相關開源軟體準備3,JDK和Tomcat的安裝4,Nginx編譯安裝和代理配置5,進行測試6,開機自啟動7,注意事項——————————————————————————————————一,環境介紹

搭建平台:CentOS5.6  64bit

方式:Nginx和兩個Tomcat(多個Tomcat方法一樣)安裝在同一台伺服器上,當然Nginx也可以在另一台伺服器上,不過沒有這個必要。

伺服器ip: 58.x.x.x

兩個JSP應用:payment和esales

JSP應用payment對應的域名:pay.opseye.com

JSP應用esales對應的域名:esales.opseye.com

注意:上面兩個域名在DNS那裡都解析到 58.x.x.x 這個IP位址。

二, 相關開源軟體準備

我習慣于把軟體統一放在/usr/local/src ,純屬個人習慣。

1,JDK的安裝:

1cp/usr/local/src/jdk-6u24-linux-x64-rpm.bin /usr/2chmod+x /usr/jdk-6u24-linux-x64-rpm.bin3cd/usr/4./jdk-6u24-linux-x64-rpm.bin

出現提示輸入yes or no時,輸入yes.

安裝完畢後,在/etc/profile檔案末尾添加:

1JAVA_HOME=/usr/java/default2JRE_HOME=$JAVA_HOME/jre3PATH=$PATH:$JAVA_HOME/bin4CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/lib5exportJAVA_HOME JRE_HOME PATH CLASSPATH

儲存退出後執行:

1.  /etc/profile

以使設定的環境變量加載到目前session的系統環境中,Tomcat啟動和關閉時會使用到這些變量。

2,Tomcat的安裝,使用二進制版本,直接解壓就可以用。

01cd/usr/local/src02 03tarzxf apache-tomcat-6.0.30.tar.gz -C /usr/local/04cd/usr/local/05 06# 準備payment應用的tomcat07mvapache-tomcat-6.0.30 tomcat_payment08 09# 準備esales應用的tomcat10cp-r tomcat_payment   tomcat_esales

3, 配置tomcat

建立網站根目錄:nginx和tomcat共同使用

1mkdir-p /data/www/htdocs/

在網站根目錄中 建立兩個應用的目錄:

1mkdir-p /data/www/htdocs/{payment,esales}

把tomcat啟動需要的host-manager,manager(在tomcat_payment/webapps下) 拷貝到兩個應用的目錄:

1cp-r /usr/local/tomcat_payment/webapps/*   /data/www/htdocs/payment/2 3cp-r /usr/local/tomcat_payment/webapps/*  /data/www/htdocs/esales/

注意:把payment和esales兩個應用程式分别放置在

/data/www/htdocs/payment/ROOT/

/data/www/htdocs/esales/ROOT/ 

配置兩個應用的conf/server.xml:

1)端口配置:

隻需要配置其中一個應用的即可(使其差別于另一個),我們配置第二個應用:esales

1<Server port="8006" shutdown="SHUTDOWN">2 3<Connector port="8081" protocol="HTTP/1.1"4 5<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" >

這樣同時啟用兩個應用的時候,就不會出現端口沖突了。

2) 應用根目錄配置:

esales應用:

1<Host name="localhost" appBase="/data/www/htdocs/esales"

payment應用:

1<Host name="localhost" appBase="/data/www/htdocs/payment"

分别啟動兩個tomcat:

1/usr/local/tomcat_payment/bin/startup.sh2 3/usr/local/tomcat_esales/bin/starup.sh

時時檢視啟動日志,看是否有報錯:

1tail-f  /usr/local/tomcat_payment/logs/catalina.out

檢視所有的端口是否已經在監聽;

1netstat-nlpt四, Nginx編譯安裝和代理配置

1,編譯安裝Nginx

建立Nginx使用者群組:

1/usr/sbin/groupadd www2/usr/sbin/useradd-g www www  -s /sbin/nologin

安裝Nginx所需要的庫:

1yum install-y pcre pcre-devel zlib zlib-devel openssl openssl-devel

pcre庫用于支援使用perl的相容正則,zlib庫使用者支援gzip壓縮,openssl用于支援https協定。

非Centos系統的,可以通過下載下傳相應的源碼包進行編譯安裝。

編譯安裝Nginx:

01cd/usr/local/src/02 03tarzxf nginx-1.0.10.tar.gz04 05cdnginx-1.0.1006 07./configure --user=www --group=www \08--prefix=/usr/local/nginx \09--with-http_stub_status_module \10--with-http_ssl_module11 12make&& makeinstall  

如果編譯過程有報錯,很可能是系統沒有安裝gcc相關編譯器或缺少類包,根據錯誤提示,逐一排查即可。

把nginx指令路徑加到系統PATH标量中,友善使用:

1cat>>/etc/profile<<EOF2 3# Nginx4 5exportPATH=$PATH:/usr/local/nginx/sbin/nginx6 7EOF8 9.  /etc/profile

這樣我們就可以在任意路徑直接使用nginx指令來啟動停止http服務了。

2,Nginx反向代理tomcat的配置

cat  /usr/local/nginx/conf/nginx.conf

3,啟動Nginx:

網站根目錄權限設定:

1chown-R www.www  /data/www/htdocs/

在啟動之前,我們先檢查配置檔案是否正确

1nginx -t

如果出現以下資訊則表明配置正确

1nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

啟動Nginx

1nginx

檢視80端口是否已啟動

1netstat-nlpt

如果修改了配置檔案,可以通過下面指令實作平滑重新開機(或是說不影響業務情況下的重新加載配置檔案)

1nginx -s reload五,進行測試

寫個最簡單的jsp頁面,用來輸出經典的Hello world!

cat   index.jsp

1<%2out.println("Hello world! payment");3%>

cat index1.jsp

1<%2out.println("Hello world! esales");3%>

把index.jsp和index1.jsp分别放到/data/www/htdocs/payment/ROOT和/data/www/htdocs/esales/ROOT

通過浏覽器通路payment.opseye.com/index.jsp和esales.opseye.com/index1.jsp将分别看到:

1Hello world! payment2 3Hello world! esales

說明我們已經成功了:) 喝杯咖啡休息一下吧~

六,開機自啟動

把Tomcat和Nginx的啟動指令加入到/etc/rc.local

1cat>>/etc/rc.local<<EOF2# Tomcat3/usr/local/tomcat_payment/bin/startup.sh4/usr/local/tomcat_esales/bin/startup.sh5 6# Nginx7/usr/local/nginx/sbin/nginx8EOF七,注意事項:

有以下幾點需要注意的:

1,注意看一下以上案例介紹中,關于Tomcat的網站根路徑和Nginx網站根路徑的差別

2,實作動靜分離,把動态頁面交給Tomcat處理。Nginx配置檔案中關于此處的配置

1location ~ \.(jsp|jspx|do|action)?$ {2 proxy_redirect off;3 proxy_set_header Host $host;4 proxy_set_header X-Forwarded-For $remote_addr;5proxy_pass 6}

根據你自己的JSP應用程式,把動态頁面的字尾名搞清楚,寫全了,不要落下,否則會把落下的動态頁面交給Nginx處理,結果可想而知,Nginx是沒有這種能力的。。。

3,關于啟動順序,其實先啟動Nginx或先啟動Tomcat都可以。

不過建議先依次啟動兩個Tomcat ,再啟動Nginx,至于為什麼,自己想去:)

(全文完)