linux是最常用的web伺服器,本節我們將通過整合apache和tomcat構建一個java/jsp運行平台,詳細介紹web伺服器的搭建過程。
一、apache與tomcat整合的必要性
Apache是最流行的Web伺服器,開放原始碼,支援跨平台的應用(可以運行在幾乎所有的Linux、Unix、Windows系統平台上),尤其對Linux的支援相當完美。
apache的優點有:
功能強大,apache內建了很多功能模組,可根據需求編譯自己需要的模組。
配置簡單,apache的設定檔非常簡單,通過簡單的配置可實現強大功能。
速度飛快,apache處理靜態頁面檔案效率非常高,可以應對大並發和高負荷訪問請求。
效能穩定,apache在高負荷請求下效能表現卓越,執行效率非常高。
但是apache也有自身的缺點:
只支援靜態網頁,對於jsp、php等動態網頁不支援
Apache是以進程為基礎的結構,進程要比線程消耗更多的系統開支,因此,不太適合於多處理器環境。
Tomcat是Sun和Apache合作做出來的JSPServer,有如下優點:
支援Servlet和JSP,可以很好的處理動態網頁。
跨平台性好:Tomcat是Java程式,所以只要有JDK就可以使用,不需要考慮作業系統平台。
但是,tomcat也有自身缺點:
處理靜態頁面效率不高:Tomcat本身可以做為Web Server,但是tomcat在處理靜態頁面時沒有Apache迅速。
可配置性不強:tomcat不像Apache一樣配置簡單,穩定、強壯。
綜上所述,通過相互的整合剛好彌補了各自的缺點,通過整合可以實現:
用戶端請求靜態頁面時,由Apache伺服器響應請求。
用戶端請求動態網頁面時,則是Tomcat伺服器響應請求。
通過apache資訊過濾,實現網站動、靜頁面分離,保證了應用的可擴充性和安全性。
既然要讓Apache和Tomcat協調工作,就必需有一個連接器把它們聯絡起來,這就是下面要提到的Connector,下個小節具體講述Connector的選擇和使用。
二、 Apache和Tomcat連接器
Apache是模組化的web伺服器,這意味著核心中只包含實現最準系統的模組。擴充功能可以作為模組動態載入來實現。為了讓apache和tomcat協調工作,開源愛好者們開發出了很多可以利用的模組,在Apache2.2版本之前,一般有兩個模組可供選擇:mod_jk2和mod_jk,mod_jk2模組是比較早的一種連接器,在動、靜頁面過濾上可以使用Regex,因此使用配置靈活,但是mod_jk2模組現在已經沒有開發人員支援了,版本更新也就此停止。繼承jk2模組的是mod_jk模組,mod_jk模組支援Apache 1.x和2.X系列版本,現在一般都使用mod_jk做Apache和Tomcat的連接器。
在Apache2.2版本以後,又出現了兩種連接器可供選擇,那就是http-proxy和proxy-ajp模組,apache的proxy(代理)模組可以實現雙向代理,功能非常強大,從連接器的實現原理看,用http-proxy模組實現也是很自然的事情,只需開啟tomcat的http功能,然後用apache的proxy代理功能將動態請求交給tomcat處理,而待用資料交給apache自身就可以了。proxy-ajp模組是專門為tomcat整合所開發的,通過ajp協議專門代理對tomcat的請求。根據官方的測試,proxy-ajp的執行效率要比http-proxy高,因此在Apache2.2以後的版本,用proxy-ajp模組作為apache和tomcat的連接器是個不錯的選擇。
需要說明的是,這些串連功能的實現,都是通過在apache中載入相應的功能模組實現,比如上面提到的mod_jk、mod_jk2、proxy-ajp模組,都要事先通過源碼編譯出對應的模組,然後通過apache設定檔動態載入,實現連接器功能。這點也是apache的優勢所在。
在下面的講述中,我們將重點講述mod_jk作為連接器的安裝配置與實現。