首先我們先介紹一下為什麼要讓Apache與Tomcat之間進行連接配接。事實上Tomcat本身已經提供了HTTP服務,該服務預設的端口是8080,裝好tomcat後通過8080端口可以直接使用Tomcat所運作的應用程式,你也可以将該端口改為80。
既然Tomcat本身已經可以提供這樣的服務,我們為什麼還要引入Apache或者其他的一些專門的HTTP伺服器呢?原因有下面幾個:
1. 提升對靜态檔案的處理性能;
2. 利用Web伺服器來做負載均衡以及容錯;
3. 無縫的更新應用程式。
這三點對一個web網站來說是非常之重要的,我們希望我們的網站不僅是速度快,而且要穩定,不能因為某個Tomcat當機或者是更新程式導緻使用者通路不了,而能完成這幾個功能的比較好的HTTP伺服器是 apache 的 http server了,它跟tomcat的結合是最緊密和可靠的。
在Apache2.2之前,一般有兩個元件可選擇。mod_jk和mod_jk2。後來mod_jk2由于沒有開發人員的支援,沒更新了,轉而更新mod_jk,是以現在一般都使用mod_jk做Apache和Tomcat的連接配接器。要指出的是mod_jk支援 Apache 1.x和2.X系列。
不過,自從Apache2.2出來後,又多了兩種種選擇,那就是 proxy-ajp 和 http-proxy。大家知道Apache裡的proxy子產品,可以實作雙向代理功能,功能非常強大。其實從連接配接器的實作原理上來說,用proxy子產品來實作是非常自然的。proxy子產品的功能無非就是把相關的請求發給特定的主機再傳回結果。那連接配接器的功能需求就是要把所有對Servlet/JSP的請求都轉給背景的Tomcat。而且所FreeBSD郵件清單上說,使用proxy-ajp要比 mod_jk的效率要高。看來,使用Apache自帶子產品,要比另外編譯的來得可靠。
既然有了ajp_proxy 專門的 ajp 協定代理,http-proxy 就沒有必要使用這種方法了。
我主要測試成功了ajp_proxy ,http-proxy沒有測試,jk 配置了一整天,沒有成功,但是把主要過程附在後面,在必須要用 jd 這種方法時,作為參考。
環境: apache 2.2.4,tomcat 5.5,jdk1.5,winxpsp2
apache 2.2 及後續版本,在配置檔案上面進行了調整,把一些配置繁瑣的設定獨立出來,在需要的時候再包含進主配置檔案,以簡化 httpd.conf 的檔案管理。
一. ajp_proxy (重點采取的方法)
1. 開啟代理子產品
httpd.conf 檔案中
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
引入虛拟主機檔案
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
去掉 #
2. 配置 ajp-proxy
為了針對不同的虛拟主機做不同的配置政策,把 ajp-proxy 的配置寫在每個虛拟主機配置檔案中,而不要寫在全局配置中。
Apache2.2/conf/extra/httpd-vhosts.conf 檔案中
#
# Use name-based virtual hosting.
NameVirtualHost *:80
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
# proxy 實作代理
# 實作 www.code.com 虛拟主機
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot E:/program/www/www.code.com
ServerName www.code.com
ServerAlias code.com
# 不需要代理的,apache 直接解析目錄,用"!"
# 順序很重要,您需要把拒絕指令放置在普通ProxyPass指令之前
ProxyPass /images/ !
ProxyPass /css/ !
ProxyPass /js/ !
ProxyPass /php/ !
# 轉發所有非禁止的請求
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
#轉發指定目錄的請求
#ProxyPass /jsp/ ajp://127.0.0.1:8009/jsp/
#ProxyPassReverse /jsp/ ajp://127.0.0.1:8009/jsp/
#ProxyPass /servlet/ ajp://127.0.0.1:8009/servlet/
#ProxyPassReverse /servlet/ ajp://127.0.0.1:8009/servlet/
#負載均衡,未測試
#ProxyPass / balancer://example/
#<Proxy balancer://example/>
#BalancerMember ajp://server1:8080/
#BalancerMember ajp://server2:8080/
#BalancerMember ajp://server3:8080/
#</Proxy>
# logs
# 一定要保證 E:/program/www/www.code.com/logs/httpd/ 目錄存在,否則 apache 不能啟動
ErrorLog E:/program/www/www.code.com/logs/httpd/www.code.com_log
CustomLog E:/program/www/www.code.com/logs/httpd/www.code.com_log common
# 允許apache通路虛拟主機所在的目錄
<Directory "E:/program/www/www.code.com">
Options Indexes FollowSymlinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# 禁止apache通路虛拟主機所在的目錄中的WEB-INF目錄
# 由于上述設定了轉發所有的請求,tomcat 自然不會通路此目錄,但也加在這裡,用以明顯申明。
<Directory ~ "/WEB-INF/">
Order deny,allow
Deny from all
</Directory>
# 禁止apache通路虛拟主機所在的目錄中的META-INF目錄
<Directory ~ "/META-INF/">
</VirtualHost>
apache-tomcat-5.5.17/conf/server.xml 中
<Host name="www.code.com" debug="0" appBase="E:/program/www/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="E:/program/Apache2.2/logs/httpd" prefix="standard_log." suffix=".txt"
timestamp="true"/>
<Context
path="" docBase="E:/program/www/code.com" debug="1" privileged="true" reloadable="true">
</Context>
</Host>
說明:
1. 為了針對不同的虛拟主機做不同的配置政策,把 ajp-proxy 的配置寫在每個虛拟主機配置檔案中,而不要寫在全局配置檔案 httpd.conf 中。當啟用虛拟主機配置檔案 httpd-vhosts.conf 之後,主配置檔案 httpd.conf 中的主機配置被替代,即隻能通路 httpd-vhosts.conf 中配置的虛拟主機。
2. 虛拟主機的目錄設定結構盡量清晰,如 /www 為所有虛拟主機的根目錄的上級目錄,各個虛拟主機的根目錄都在 www 下面,如 www.code.com 虛拟主機的根目錄為 /www/www.code.com。這樣設定也友善 tomcat 虛拟主機設定(具體見 tomcat 設定文章)。
3. 相應的,tomcat 中也要設定對應的虛拟主機,才可以正确轉發。
(故 http://www.code.com 和 http://www.code.com:8080 會通路同一個虛拟主機目錄)
(修改 http://localhost:8080 的虛拟主機的内容,設定一個歡迎界面,代替預設的首頁)
4. 為了簡化配置工作,可把轉發設定為全部轉發;
5. 為了充分發揮 apache 的作用,合理規劃目錄結構,充分利用禁止轉發功能。
本文轉自快樂就好部落格園部落格,原文連結:http://www.cnblogs.com/happyday56/p/6025463.html,如需轉載請自行聯系原作者