這類(lèi)文檔很多很多,但是大多是由不明原理的人拘泥于具體版本寫(xiě)出來(lái)的,有很多錯(cuò)漏或多余的部分。
最后找到一篇寫(xiě)得很很不錯(cuò)的,http://macawspark.spaces.live.com/blog/
我修正了其中的錯(cuò)誤然后加了一些自己的理解
原理
tomcat 為一個(gè)jsp的容器,apache為一個(gè)webserver,兩者之間通信通過(guò)worker進(jìn)行(由Tomcat使用Server.xml文件中Connector的標(biāo)簽來(lái)定義其端口和協(xié)議),通過(guò)mod_jk的模塊(由web服務(wù)器像apache、iis等使用)和Web Server通信。
通信協(xié)議有很多,其中jk2已經(jīng)被拋棄了,現(xiàn)在就用jk就好了。
整個(gè)過(guò)程其實(shí)就是讓apache的httpd.conf文件調(diào)用mod_jk.conf,mod_jk.conf調(diào)用workers.properties,最后配置虛擬主機(jī)。
文件說(shuō)明
mod_jk.conf
主要定義mod_jk模塊的位置以及mod_jk模塊的連接日志設(shè)置,還有定義worker.properties文件的位置。
worker.properties
定義worker的參數(shù),主要是連接tomcat主機(jī)的地址和端口信息。如果Tomcat與apache不在同一臺(tái)機(jī)器上,或者需要做多臺(tái)機(jī)器上tomcat的負(fù)載均衡只需要更改workers.properties文件中的相應(yīng)定義即可。
第一部分:安裝配置tomcat apache mod_jk j2sdk
準(zhǔn)備下載下列文件
Jdk1.5
下載地址: http://java.sun.com
tomcat 5.5.9
下載地址:http://jakarta.apache.org
apache apache_2.0.59
下載地址: http://httpd.apache.org/download.cgi
jakarta-tomcat-connectors-jk2.0.43-win32-apache2.0.49(根據(jù)Apache版本決定)
下載地址:http://archive.apache.org/dist/jakarta/tomcat-connectors/
把上面所有組件都安裝到D:\Server目錄下,這樣也方便日常管理配置和將來(lái)移植到別的服務(wù)器上去。
1:安裝j2sdk
安裝到 D:\server\j2sdk\ 目錄下,注意安裝成系統(tǒng)服務(wù)
2: 安裝tomcat
安裝到D:\server\tomcat\目錄下,注意安裝成系統(tǒng)服務(wù)
可能遇到的問(wèn)題
問(wèn)題1: 在解析JSP頁(yè)面時(shí),提示無(wú)法找到j(luò)ava compiler
請(qǐng)拷貝 j2sdk\lib\tools.jar 到 tomcat\common\lib下面。
使用tomcat作為service啟動(dòng)后總是這樣,當(dāng)然用startup.bat腳本啟動(dòng)倒是完全正常。主要原因分析起來(lái)是以service方式啟動(dòng)的Tomcat無(wú)法讀取JAVA_HOME 和CLASS_PATH等環(huán)境變量。
問(wèn)題2:如何解決通過(guò)服務(wù)方式啟動(dòng)tomcat時(shí)log中提示ZoneInfo:d:\server\j2sdk\lib\zi\ZoneInfoMappings(系統(tǒng)找不到指定的路徑。)
從d:\server\j2sdk\jre\lib目錄拷貝所有文件放到 d:\server\j2sdk\lib\ ,jre\lib 中的文件和j2sdk\lib\ 中的文件沒(méi)有一個(gè)重復(fù)的,不用擔(dān)心會(huì)覆蓋掉j2sdk\lib 中原有的任何文件。
3:安裝apache 到 d:\server\ (會(huì)自動(dòng)生成apache2文件夾)
配置 index.jsp 為默認(rèn)頁(yè) 配置 GB2312為默認(rèn)語(yǔ)言
不只Apache的httpd.conf中定義了默認(rèn)頁(yè)面文件,連Tomcat的web.xml配置文件的結(jié)尾處也定義了默認(rèn)頁(yè)面文件,而且Tomcat中定義的的優(yōu)先級(jí)還高于原有的Apache中所定義的默認(rèn)頁(yè)。
4:加入mod_jk連接模塊
拷貝 mod_jk-1.2.10-apache-2.0.43.so 到d:\server\apache2\modules\ 改名為mod_jk.so
5: 修改apache的配置文件
為了保持httpd.conf文件的簡(jiǎn)潔,把jk模塊的配置放到單獨(dú)的文件中來(lái),就在httpd.conf中增加一行調(diào)用
代碼
include D:\server\Apache2\conf\mod_jk.conf
6:配置mod_jk.conf
請(qǐng)注意使用絕對(duì)路徑
其實(shí)最關(guān)鍵的就是 第一條 第二條 和最后一條,如果要精簡(jiǎn),就保留這三條內(nèi)容就可以了。
代碼
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# 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 ajp13
#JkMount /servlet/* ajp13
# Send JSPs for context /examples to worker named ajp13
JkMount /*.jsp ajp13
上面這一行我們?cè)O(shè)置了了 /*.jsp ajp13 就是說(shuō)把所有.jsp結(jié)尾的文件都由ajp13這個(gè)worker交給tomcat處理了,如果應(yīng)用被映射為一個(gè).do的URL,這樣就會(huì)出錯(cuò).解決方法是再添加如下一行:
代碼
JkMount /*.do ajp13
7:配置apache2\conf\workers.properties
代碼
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost #本機(jī),若上面Tomcat主機(jī)不為localhost,作相應(yīng)修改
worker.ajp13.type=ajp13 #類(lèi)型
worker.ajp13.lbfactor=1 #代理數(shù),不用修改
第二部分:虛擬主機(jī)的配置
舉例配置2個(gè)vhost網(wǎng)站 一個(gè)是 localhost ,另一個(gè)是 www.ok.com
當(dāng)然www.ok.com 是虛擬的,本地測(cè)試時(shí),應(yīng)該修改系統(tǒng)中的hosts文件,添加一行 127.0.0.1 www.ok.com
1:Apache 虛擬主機(jī)配置:
Httpd.conf文件最后添加
代碼
include D:\server\Apache2\conf\vhost.conf
而vhost.conf內(nèi)容寫(xiě)
代碼
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster at localhost
DocumentRoot "D:/server/Tomcat/webapps/ROOT"
ServerName localhost
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host dot example.com
DocumentRoot D:/server/www/
ServerName www.ok.com
ErrorLog logs/ok.com-error_log
CustomLog logs/ok.com-access_log common
<Location /server-status> # 這樣我可以看到apache服務(wù)器狀態(tài)
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
Allow from www.ok.com
</Location>
</VirtualHost>
2:Tomcat虛擬主機(jī)配置
添加新的www.ok.com 虛擬主機(jī),在tomcat安裝路徑\conf\server.xml的最后,找到<Engine>段,改為
代碼
<Engine>
<Host name=”localhost” ……>
</Host>
<Host name="www.ok.com" debug="0" appBase="D:/server/www/"unpackWARs="true" autoDeploy="true" xmlValidation="false"xmlNamespaceAware="false">
<Context path="" docBase="." />
<Logger className="org.apache.catalina.logger.FileLogger"directory="logs" prefix="ok.com_log." suffix=".txt" timestamp="true"/>
</Host>
</Engine>
3:測(cè)試虛擬主機(jī)效果
訪問(wèn)http://localhost/ 應(yīng)該可以看到原來(lái)的tomcat默認(rèn)頁(yè)面。
寫(xiě)一個(gè) index.jsp
代碼
<html>
<title>
test jsp
</title>
<%
String showMessage="Oh My God!";
out.print(showMessage);
%>
</html>
放在d:/server/www下面,訪問(wèn) http://www.ok.com
頁(yè)面顯示Hello World! 就成功了
第三部分,部分相關(guān)性能優(yōu)化及其它問(wèn)題
如何使用server版jvm ?
Jvm動(dòng)態(tài)庫(kù)有client和server兩個(gè)版本,分別針對(duì)桌面應(yīng)用和服務(wù)器應(yīng)用做了相應(yīng)的優(yōu)化,client版本加 載速度較快,server版本加載速度較慢但運(yùn)行起來(lái)較快。
在開(kāi)始菜單 tomcat5 ->tomcat config的java屬性中 有一項(xiàng) jvm路徑 指向server目錄下的jvm就行了。
更改默認(rèn)java.exe調(diào)用的jvm.dll,這個(gè)由jvm.cfg決定。
編輯%JAVA_HOME%\jre\lib\i386\jvm.cfg
里面第一行寫(xiě)的是 -client 默認(rèn)就是client版本 ,把第二行的-server KNOWN 放到第一行, 如下面所示
代碼
-server KNOWN
-client KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
改完保存,然后看看默認(rèn)版本:
C:\java -version
java version "1.4.2_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_07-b05)
Java HotSpot(TM) Server VM (build 1.4.2_07-b05, mixed mode)
關(guān)于JAVA_HOME 與CATALINA_HOME、 CLASSPATH
ClassPath網(wǎng)上有人說(shuō)在j2sdk1.3開(kāi)始就不需要配置了,而本例中實(shí)際是不需要配置JAVA_HOME和CATALINA_HOME的,因?yàn)閠omcat以service模式啟動(dòng)根本不認(rèn)你的java_home,當(dāng)然為了讓你能夠在命令行運(yùn)行startup.bat時(shí)也能順利啟動(dòng)Tomcat,可以配置也建議配置上JAVA_HOME 與CATALINA_HOME,ClassPath就免了吧,連Resin都不需要這個(gè)了。
有關(guān)路徑設(shè)置
Path=d:\server\jdk\bin;…… 放到最前,避免有多個(gè)jdk時(shí)的很多問(wèn)題
關(guān)于apache2在win平臺(tái)上的一個(gè)小問(wèn)題
可能apache的日志中常出現(xiàn)類(lèi)似如下的提示
[error] (730038)An operation was attempted on something that is not asocket.: winnt_accept: AcceptEx failed. Attempting to recover.
這是由于apache使用了微軟的AcceptEx()調(diào)用的緣故,禁用掉即可,此問(wèn)題只會(huì)出現(xiàn)在win平臺(tái)且apache的2.0.49和更高版本上,出現(xiàn)錯(cuò)誤的大概原因是防火墻和防病毒軟件所導(dǎo)致,導(dǎo)致結(jié)果也有好幾種,像apache占用很高cpu資源或者網(wǎng)站頁(yè)面無(wú)法打開(kāi)。
解決方法修改d:\server\apache2\conf\httpd.conf中的mpm部分
代碼
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
Win32DisableAcceptEx #添加這一行即可,做過(guò)壓力測(cè)試,對(duì)性能影響很小,可以忽略
</IfModule>
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。