既然 Tomcat 本身已經可以提供這樣的服務我們為什麼還要引入 Apache 或者其他的一些專門的 HTTP 服務器呢?原因有下面幾個Apache的HTTPD是目前比較受歡迎的網站服務器軟件它不但功能強大而且完全免費並且支持市場上流行的各種操作系統(WindowsLinuxMac os)同時對於Java Servlet/JSP的支持通常也會使用同樣Apache出品的Tomcat Tomcat除了支持Java Servlet/JSP之外也可以當做網站服務器使用但是在對於靜態的html文件圖片文件等的解析效率上不如Apache HTTPD的執行效率高應用tomcat的服務器如果網站的訪問量較大系統資源占用會明顯升高近日筆者在項目執行過程中遇到這一問題便也想到同時應用tomcat+apache服務Apache負責靜態資源處理tomcat負責jsp和java servlet等動態資源的處理
整合之後的好處是
提升對靜態文件的處理性能
利用 Web 服務器來做負載均衡以及容錯
無縫的升級應用程序
原理:
tomcat 為一個servelet容器apache為一個web server兩者之間通信通過mod_jk的模塊(由web服務器像apacheiis等使用)和Web Server通信Tomcat 默認的 AJP Connector 的端口是 整個過程其實就是讓apache的文件調用nfnf調用workersproperties最後配置虛擬主機
文件說明
nf
主要定義mod_jk模塊的位置以及mod_jk模塊的連接日志設置還有定義workerproperties文件的位置
workerproperties
定義worker的參數主要是連接tomcat主機的地址和端口信息如果Tomcat與apache不在同一台機器上或者需要做多台機器上tomcat的負載均衡只需要更改workersproperties文件中的相應定義即可
%APACHE_HOME%為你的安裝目
整合
1准備下載下列文件
Jdk
下載地址:
tomcat
下載地址
apache_winxno_sslmsi
下載地址:
mod_jk-apacheso
下載地址connectors/
安裝好Jdktomcatapache後加入mod_jk連接模塊就是把mod_jk-apacheso文件重名為mod_jkso文件並拷貝到%APACHE_HOME%modules下
修改apache的配置文件
為了保持文件的簡潔把jk模塊的配置放到單獨的文件中來就在中增加一行調用
代碼 include %APACHE_HOME%Apacheconfnf
配置nf
請注意使用絕對路徑
其實最關鍵的就是 第一條 第二條 和最後一條如果要精簡就保留這三條內容就可以了
代碼
# Load mod_jk module
LoadModule jk_module E:Program FilesApache Software FoundationApachemodulesmod_jkso
# Where to find workersproperties
JkWorkersFile E:Program FilesApache Software FoundationApacheconfworkersproperties
# Where to put jk logs
JkLogFile E:Program FilesApache Software FoundationApachelogsmod_jklog
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat [%a %b %d %H:%M:%S %Y]
# JkOptions indicate to send SSL KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat %w %V %T
# Send servlet for context /examples to worker named ajp
#JkMount /servlet/* ajp
# Send JSPs for context /examples to worker named ajp
JkMount /*jsp ajp
JkMount /*do ajp
上面這一行我們設置了了 /*jsp ajp 就是說把所有jsp結尾的文件都由ajp這個worker交給tomcat處理了如果應用被映射為一個do的URL這樣就會出錯解決方法是再添加如下一行
代碼
JkMount /*do ajp
:配置apacheconfworkersproperties
代碼
workerstomcat_home=E:Program FilesApache Software FoundationTomcat
workersjava_home=E:Program FilesJavajdk_
workerlist=ajp
workerajpport=
workerajphost=localhost #
workerajptype=ajp #
workerajplbfactor= #
workerlist=ajp
workerajpport=
workerajphost=localhost #本機若上面Tomcat主機不為localhost作相應修改
workerajptype=ajp #類型
workerajplbfactor= #代理數不用修改
第二部分:虛擬主機的配置
舉例配置個vhost網站 一個是 localhost 另一個是
當然 是虛擬的本地測試時應該修改系統中的hosts文件添加一行
Apache 虛擬主機配置
nf文件最後添加
代碼
include D:serverApacheconfnf
而nf內容寫
代碼
NameVirtualHost *:
<VirtualHost *:>
ServerAdmin webmaster at localhost
DocumentRoot D:/server/Tomcat/webapps/ROOT
ServerName localhost
ErrorLog logs/localhosterror_log
CustomLog logs/localhostaccess_log common
</VirtualHost>
<VirtualHost *:>
ServerAdmin webmaster@dummyhost dot
DocumentRoot D:/server/www/
ServerName
ErrorLog logs/error_log
CustomLog logs/access_log common
<Location /serverstatus> # 這樣我可以看到apache服務器狀態
SetHandler serverstatus
Order denyallow
Deny from all
Allow from localhost
Allow from
</Location>
</VirtualHost>
Tomcat虛擬主機配置
添加新的 虛擬主機在tomcat安裝路徑confserverxml的最後找到<Engine>段改為
代碼
<Engine>
<Host name=localhost ……>
</Host>
<Host name= debug= appBase=D:/server/www/ unpackWARs=true autoDeploy=true xmlValidation=false xmlNamespaceAware=false>
<Context path= docBase= />
<Logger className=orgapachecatalinaloggerFileLogger directory=logs prefix=_log suffix=txt timestamp=true />
</Host>
</Engine>
測試虛擬主機效果
訪//localhost/ 應該可以看到原來的tomcat默認頁面
寫一個 indexjsp
代碼
<html>
<title>
test jsp
</title>
<%
String showMessage=Oh My God!;
outprint(showMessage);
%>
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28769.html