主要參考文章: http://zym-nanako./blog/147526 首先我們先介紹一下為什么要讓Apache與Tomcat之間進行連接。事實上Tomcat本身已經(jīng)提供了HTTP服務(wù),該服務(wù)默認的端口是8080,裝好tomcat后通過8080端口可以直接使用Tomcat所運行的應(yīng)用程序,你也可以將該端口改為80。 既然Tomcat本身已經(jīng)可以提供這樣的服務(wù),我們?yōu)槭裁催€要引入Apache或者其他的一些專門的HTTP服務(wù)器呢?原因有下面幾個: 1. 提升對靜態(tài)文件的處理性能; 2. 利用Web服務(wù)器來做負載均衡以及容錯; 3. 無縫的升級應(yīng)用程序。 這三點對一個web網(wǎng)站來說是非常之重要的,我們希望我們的網(wǎng)站不僅是速度快,而且要穩(wěn)定,不能因為某個Tomcat宕機或者是升級程序?qū)е掠脩粼L問不了,而能完成這幾個功能的比較好的HTTP服務(wù)器是 apache 的 http server了,它跟tomcat的結(jié)合是最緊密和可靠的。 在Apache2.2之前,一般有兩個組件可選擇。mod_jk和mod_jk2。后來mod_jk2由于沒有開發(fā)人員的支持,沒更新了,轉(zhuǎn)而更新mod_jk,所以現(xiàn)在一般都使用mod_jk做Apache和Tomcat的連接器。要指出的是mod_jk支持 Apache 1.x和2.X系列。 不過,自從Apache2.2出來后,又多了兩種種選擇,那就是 proxy-ajp 和 http-proxy。大家知道Apache里的proxy模塊,可以實現(xiàn)雙向代理功能,功能非常強大。其實從連接器的實現(xiàn)原理上來說,用proxy模塊來實現(xiàn)是非常自然的。proxy模塊的功能無非就是把相關(guān)的請求發(fā)給特定的主機再返回結(jié)果。那連接器的功能需求就是要把所有對Servlet/JSP的請求都轉(zhuǎn)給后臺的Tomcat。而且所FreeBSD郵件列表上說,使用proxy-ajp要比 mod_jk的效率要高??磥恚褂肁pache自帶模塊,要比另外編譯的來得可靠。 既然有了ajp_proxy 專門的 ajp 協(xié)議代理,http-proxy 就沒有必要使用這種方法了。 我主要測試成功了ajp_proxy ,http-proxy沒有測試,jk 配置了一整天,沒有成功,但是把主要過程附在后面,在必須要用 jd 這種方法時,作為參考。 環(huán)境: apache 2.2.4,tomcat 5.5,jdk1.5,winxpsp2 apache 2.2 及后續(xù)版本,在配置文件上面進行了調(diào)整,把一些配置繁瑣的設(shè)置獨立出來,在需要的時候再包含進主配置文件,以簡化 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 實現(xiàn)代理 # 實現(xiàn) www.co <VirtualHost *:80> ServerAdmin webmaster@co DocumentRoot E:/program/www/www.co ServerName www.co ServerAlias co
# 不需要代理的,apache 直接解析目錄,用"!" # 順序很重要,您需要把拒絕指令放置在普通ProxyPass指令之前 ProxyPass /images/ ! ProxyPass /css/ ! ProxyPass /js/ ! ProxyPass /php/ ! # 轉(zhuǎn)發(fā)所有非禁止的請求 ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/
#轉(zhuǎn)發(fā)指定目錄的請求 #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.co ErrorLog E:/program/www/www.co CustomLog E:/program/www/www.co # 允許apache訪問虛擬主機所在的目錄 <Directory "E:/program/www/www.co Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> # 禁止apache訪問虛擬主機所在的目錄中的WEB-INF目錄 # 由于上述設(shè)定了轉(zhuǎn)發(fā)所有的請求,tomcat 自然不會訪問此目錄,但也加在這里,用以明顯申明。 <Directory ~ "/WEB-INF/"> Order deny,allow Deny from all </Directory> # 禁止apache訪問虛擬主機所在的目錄中的META-INF目錄 # 由于上述設(shè)定了轉(zhuǎn)發(fā)所有的請求,tomcat 自然不會訪問此目錄,但也加在這里,用以明顯申明。 <Directory ~ "/META-INF/"> Order deny,allow Deny from all </Directory> </VirtualHost> apache-tomcat-5.5.17/conf/server.xml 中 <Host name="www.co 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/co </Context>
</Host> 說明: 1. 為了針對不同的虛擬主機做不同的配置策略,把 ajp-proxy 的配置寫在每個虛擬主機配置文件中,而不要寫在全局配置文件 httpd.conf 中。當啟用虛擬主機配置文件 httpd-vhosts.conf 之后,主配置文件 httpd.conf 中的主機配置被替代,即只能訪問 httpd-vhosts.conf 中配置的虛擬主機。 2. 虛擬主機的目錄設(shè)置結(jié)構(gòu)盡量清晰,如 /www 為所有虛擬主機的根目錄的上級目錄,各個虛擬主機的根目錄都在 www 下面,如 www.co 3. 相應(yīng)的,tomcat 中也要設(shè)置對應(yīng)的虛擬主機,才可以正確轉(zhuǎn)發(fā)。 (故 http://www.co (修改 http://localhost:8080 的虛擬主機的內(nèi)容,設(shè)置一個歡迎界面,代替默認的首頁) 4. 為了簡化配置工作,可把轉(zhuǎn)發(fā)設(shè)置為全部轉(zhuǎn)發(fā); 5. 為了充分發(fā)揮 apache 的作用,合理規(guī)劃目錄結(jié)構(gòu),充分利用禁止轉(zhuǎn)發(fā)功能。 轉(zhuǎn)載請注明原文地址:http://www./apache/201404/10273.html |
|