方法一,使用 mod_jk。不少網站上介紹到 Apache HTTP server 和 Tomcat server 整合的時候,都是在介紹 mod_jk.so 的使用,這是一種比較老的方法,而且須要額外下載 mod_jk。Apache 和 Tomcat 的默認配置文件都須要改動。
方法二, URL rewrite,也就是對於指定格式的 URL,轉發給某個 Tomcat 的網址。這裏所說的指定格式,是指 Apache 所使用的正則表達式,通俗地將,是一種相似 * 的一種比較高級通配符。這種方法不須要下在額外的文件,只須要配置 Apache。
方法三,mod_proxy_ajp,僅在 Apache 2.1 及之後的版本中可用,Apache 自帶的一個新功能模塊。這時 Apache 使用 Apache JServ Protocol 與 Tomcat 通信。不須要下在額外的文件,須要改動Apache 和 Tomcat 的默認配置文件都須要改動。
方法四,mod_proxy。其實 mod_proxy 既能夠作相似於 Wingate 同樣的公司局域網共享上網代理,也能夠作反向代理(Reverse proxy)。這裏使用的是反向代理功能,用戶端瀏覽器不須要把代理服務器改爲這裏的 Apache 地址。mod_proxy 是 Apache 自帶功能,而且配置比較簡單。
這篇文章介紹 Apache 反向代理轉發 HTTP 請求到 Tomcat 的配置。比較簡單實用。
下載 Apache web server 2.2,安裝完成後,修改安裝目錄下的 conf/httpd.conf 文件,將如下兩行前的註釋字符 # 去掉。
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
在這個配置文件最後,加上
ProxyPass /app1 http://<tomcat_server_address>:port/url1
ProxyPassReverse /app1 http://<tomcat_server_address>:port/url1
保存配置文件後從新啓動 Apache 就能夠了。當用戶訪問
http://<apache_server_address>/app1 的時候,Apache 後臺自動將請求轉發給 Tomcat ,用戶只認爲 Apache server 就是他所要的應用服務器。 web
ProxyPass、 ProxyPassReverse 這兩個配置時,若是不加ProxyPassReverse 這行,則IE地址欄裏面顯示就是 正則表達式
tomcat所對就的地址,如http://<tomcat_server_address>:port/url1後則地址欄裏面顯示的就是http://<tomcat_server_address>:port/url1,反之,加上ProxyPassReverse這行,則顯示的就是apache的地址,把原tomcat給隱藏了 apache
細心的做者能夠看到,Tomcat 那邊沒有作任何改動,是否是說明,若是 Tomcat 換成 JBoss,或者 IBM Websphere,或者 BEA Weblogic ,也能夠用 Apache 來轉發呢?答案是,確實如此!!
這裏須要解釋的是, Apache 反向代理只作 HTTP 透明轉發,所以,Tomcat 那邊,若是使用 servelet API 獲取 request url, server info,等等,都是 Tomcat 的。在Tomcat 上的 JSP 或者 HTML 文件裏面,都應該是相對路徑,不該該使用絕對路徑,更不能使用帶 Tomcat 地址的 URL。這應該不是過高的要求,對不?
目前最新版的 Apache 自帶的 cache ,只能配置成 server 或者 virtual host 一級的,沒有辦法配置到 URL 一級。好在通常的 J2EE 應用性能問題,通常都在動態網頁部分,靜態網頁很好,所以也沒有太大關係。
對於要求比較高的應用,好比用戶量多的新聞網站或者論壇網站,若是要求是用 Apache 緩衝後臺的動態網頁,好比說,個人首頁能夠容許緩存一分鐘,則在這一分鐘內,好比有兩千次用戶訪問 http://somehost/index.jsp,只有第一次用戶訪問,Apache 會把請求轉發到 Tomcat,其他的 999 次訪問,都是由 Apache 從緩衝中取出這個頁面返回給用戶看。這樣後臺的動態網頁服務器的負荷會小不少。以目前的 Apache 最新版原本說,使用反向代理達不到這個要求,應該使用 Apaceh 新建一個 virtual host ,換成使用 URL rewrite。 瀏覽器