在項目中,幾乎任何一個項目都包括靜态資源和動态請求兩大部分。特别對于門戶網站這樣的項目,靜态内容資源會更多,我們使用一般的 tomcat 部署時,tomcat 對靜态資源的處理能力比較慢,至少比 apache 要慢很多。
為了提高項目的通路速度,降低伺服器負載提高性能,我們使用apache來處理靜态資源,把動态資源和請求交給 tomcat 處理。
當然,在單純處理并發和靜态資源名額方面,nginx要比apache好,至于nginx和apache的具體差別,以及什麼項目使用nginx、什麼項目适合用apache,異或是使用nginx加apache一起使用…… 這個不是本文要探讨的範圍,這兩個開源項目各有優缺點,大家可以針對自己項目選擇合适的方案。
本文就簡單的對apache和tomcat如何內建,進行實際配置進行說明:
apache與tomcat負載叢集內建方法有3種jk、jk_proxy、http_proxy
那麼什麼時候使用哪一個呢?這依賴于你的架構。如果你已經有了或者需要apache 2.2的功能,那麼你可以再mod_proxy和mod_jk直接選擇。mod_jk在apache2.2上允許得很好。關鍵看你需要什麼樣的功能:
mod_proxy
--------------
優勢:
不需要編譯和維護一個對立的子產品。mod_proxy,mod_proxy_http,mod_proxy_ajp,mod_proxy_balancer已經是apache 2.2+的标準內建部分;
可以使用http、https和ajp協定,即便是在同一個balancer中。
劣勢:
mod_proxy_ajp不支援大于8k的資料包;
隻有最基本的負載均衡器;
不支援域模型叢集(domain model clustering)
mod_jk
先進的負載均衡器;
先進的節點失敗偵察功能;
支援大型ajp 資料包
需要單獨維護一個獨立的子產品;
我個人建議是如果有能力維護mod_jk子產品的二進制版本,盡量使用mod_jk。mod_proxy一直在更新但還缺少一些mod_jk的功能。但是,如果你需要https和一個簡單的負載均衡就是用mod_proxy.
以 mod_jk 為例,使用1個apache 同時支援2個tomcat 不同業務的處理(web和wap)。
下載下傳連接配接apache和tomcat(mod_jk) 的包 tomcat-connectors-1.2.41-src.tar.gz
官網下載下傳位址:http://tomcat.apache.org/download-connectors.cgi
1) 配置 mod_jk 子產品
剛剛安裝了mod_jk 子產品,也已經拷貝到apache的子產品目錄中,下面就是讓apache來支援它。
需要在apache的conf目錄下建立配置檔案:
workers.properties #定義tomcat工作的的配置檔案
mod_jk.conf #定義mod_jk 的配置檔案
# cd /usr/local/apache2/conf/
# vi mod_jk.conf
# vi workers.properties
2) 修改 apache 的主配置檔案 httpd.conf 配置多個虛拟主機
a) 找到 include conf/extra/httpd-vhosts.conf 去掉前面的 “#”
b) vi conf/extra/httpd-vhosts.conf
配置檔案中 /svcroot/runtime/webstatic/shanhyweb 和 /svcroot/runtime/webstatic/shanhywap 分别為web和wap的靜态資源目錄
配置檔案中 worker_web 和 worker_wap 為我們2個處理不同業務的 tomcat
我在/app/webserver 目錄下放了2個tomcat,分别是 apache-tomcat-7.0.63-wap 和 apache-tomcat-7.0.63-web
修改 apache-tomcat-7.0.63-wap/conf/server.xml 中的ajp 端口為8109,http端口為 8180,server 端口為8105
在 apache-tomcat-7.0.63-wap/conf/server.xml 的最下面的 </host> 上面一行添加:
<context path="" docbase="/svcroot/runtime/webinterface/shanhywap" reloadable="true" distributable="true"/>
在 apache-tomcat-7.0.63-web/conf/server.xml 的最下面的 </host> 上面一行添加:
<context path="" docbase="/svcroot/runtime/webinterface/shanhyweb" reloadable="true" distributable="true"/>
重新開機apache 服務,并啟動web和wap的tomcat 服務。
修改本機 c:\windows\system32\drivers\etc 目錄下的 hosts 檔案,在最後添加:
192.168.19.130 shanhyweb.example.com
192.168.19.130 shanhywap.example.com
其中 192.168.19.130 為我們上面配置的linux 服務的ip位址。
伺服器上靜态資源檔案:
/svcroot/runtime/webstatic/shanhywap/index.html 内容為 this is my page. shanhywap-static.
/svcroot/runtime/webstatic/shanhyweb/index.html 内容為 this is my page. shanhyweb-static.
伺服器上2個tomcat 配置的項目中的 jsp 測試檔案:
/svcroot/runtime/webinterface/shanhywap/test.jsp 内容為 shanhywap content.
/svcroot/runtime/webinterface/shanhyweb/test.jsp 内容為 shanhyweb content.
通路位址測試:
通路:http://shanhywap.example.com 後網頁顯示 this is my page. shanhywap-static.
通路:http://shanhyweb.example.com 後網頁顯示 this is my page. shanhyweb-static.
通路:http://shanhywap.example.com/test.jsp 後網頁顯示 shanhywap content.
通路:http://shanhywap.example.com/test.jsp 後網頁顯示 shanhyweb content.
最後列出本問整合涉及到的相關檔案目錄位置:
apache 安裝目錄 /usr/local/apache2
apache 相關配置檔案:
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/mod_jk.conf
/usr/local/apache2/conf/workers.properties
/usr/local/apache2/conf/extra/httpd-vhosts.conf
webserver 的2個tomcat 目錄:
/app/webserver/apache-tomcat-7.0.63-wap
/app/webserver/apache-tomcat-7.0.63-web
webinterface 程式目錄(2個tomcat分别對應的項目工程) :
/svcroot/runtime/webinterface/shanhyweb
-- test.jsp
/svcroot/runtime/webinterface/shanhywap
webstatic 靜态資源目錄
/svcroot/runtime/webstatic/shanhyweb
-- index.html
/svcroot/runtime/webstatic/shanhywap
************************************************************************
題外話說一下我的目錄歸類,我的 /svcroot 目錄目錄結構如下:
/svcroot
-- runtime
-- standalone(存放java程式)
-- webinterface(存放tomcat對應的項目工程)
-- webstatic(存放項目工程的靜态資源)
-- workspace
-- build(hudson custom 目錄,svn 代碼)
-- shanhyweb-source
-- shanhywap-source
-- shanhyandroid-source
-- dist(build編譯後的檔案目錄,待釋出)
-- logs(項目相關logs)
--------------------------
(完)