在實際的生産環境中,經常會遇到同一台伺服器部署多個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,至于為什麼,自己想去:)
(全文完)