這類文檔很多很多,,但是大多是由不明原理的人拘泥于具體版本寫出來的,有很多錯(cuò)漏或多余的部分,。
最后找到一篇寫得很很不錯(cuò)的,,http://macawspark.spaces./blog/ 我修正了其中的錯(cuò)誤然后加了一些自己的理解 原理 tomcat 為一個(gè)jsp的容器,apache為一個(gè)web server,,兩者之間通信通過worker進(jìn)行(由Tomcat使用Server.xml文件中Connector的標(biāo)簽來定義其端口和協(xié)議),,通過 mod_jk的模塊(由web服務(wù)器像apache、iis等使用)和Web Server通信,。 通信協(xié)議有很多,,其中jk2已經(jīng)被拋棄了,現(xiàn)在就用jk就好了,。 整個(gè)過程其實(shí)就是讓apache的httpd.conf文件調(diào)用mod_jk.conf,,mod_jk.conf調(diào)用workers.properties,最后配置虛擬主機(jī),。 文件說明 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. tomcat 5.5.9 下載地址:http://jakarta. apache apache_2.0.59 下載地址: http://httpd./download.cgi jakarta-tomcat-connectors-jk2.0.43-win32-apache2.0.49(根據(jù)Apache版本決定) 下載地址:http://archive./dist/jakarta/tomcat-connectors/ 把上面所有組件都安裝到D:\Server目錄下,,這樣也方便日常管理配置和將來移植到別的服務(wù)器上去。 1:安裝j2sdk 安裝到 D:\server\j2sdk\ 目錄下,,注意安裝成系統(tǒng)服務(wù) 2: 安裝tomcat 安裝到D:\server\tomcat\目錄下,,注意安裝成系統(tǒng)服務(wù) 可能遇到的問題 問題1: 在解析JSP頁面時(shí),提示無法找到j(luò)ava compiler 請(qǐng)拷貝 j2sdk\lib\tools.jar 到 tomcat\common\lib下面,。 使用tomcat作為service啟動(dòng)后總是這樣,,當(dāng)然用startup.bat腳本啟動(dòng)倒是完全正常。主要原因分析起來是以service方式啟動(dòng)的Tomcat無法讀取JAVA_HOME 和CLASS_PATH等環(huán)境變量,。 問題2:如何解決通過服務(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\ 中的文件沒有一個(gè)重復(fù)的,,不用擔(dān)心會(huì)覆蓋掉j2sdk\lib 中原有的任何文件,。 3:安裝apache 到 d:\server\ (會(huì)自動(dòng)生成apache2文件夾) 配置 index.jsp 為默認(rèn)頁 配置 GB2312為默認(rèn)語言 不只Apache的httpd.conf中定義了默認(rèn)頁面文件,連Tomcat的web.xml配置文件的結(jié)尾處也定義了默認(rèn)頁面文件,,而且Tomcat中定義的的優(yōu)先級(jí)還高于原有的Apache中所定義的默認(rèn)頁,。 4:加入mod_jk連接模塊 拷貝 mod_jk-1.2.10-apache-2.0.43.so 到d:\server\apache2\modules\ 改名為mod_jk.so 5: 修改apache的配置文件 為了保持httpd.conf文件的簡潔,,把jk模塊的配置放到單獨(dú)的文件中來,就在httpd.conf中增加一行調(diào)用 代碼 include D:\server\Apache2\conf\mod_jk.conf 6:配置mod_jk.conf 請(qǐng)注意使用絕對(duì)路徑 其實(shí)最關(guā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 就是說把所有.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 #類型 worker.ajp13.lbfactor=1 #代理數(shù),,不用修改 第二部分:虛擬主機(jī)的配置 舉例配置2個(gè)vhost網(wǎng)站 一個(gè)是 localhost ,,另一個(gè)是 www. 當(dāng)然www. 是虛擬的,本地測(cè)試時(shí),,應(yīng)該修改系統(tǒng)中的hosts文件,,添加一行 127.0.0.1 www. 1:Apache 虛擬主機(jī)配置: Httpd.conf文件最后添加 代碼 include D:\server\Apache2\conf\vhost.conf 而vhost.conf內(nèi)容寫 代碼 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. ErrorLog logs/-error_log CustomLog logs/-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. </Location> </VirtualHost> 2:Tomcat虛擬主機(jī)配置 添加新的www. 虛擬主機(jī),,在tomcat安裝路徑\conf\server.xml的最后,,找到<Engine>段,改為 代碼 <Engine> <Host name=”localhost” ……> </Host> <Host name="www." 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="_log." suffix=".txt" timestamp="true" /> </Host> </Engine> 3:測(cè)試虛擬主機(jī)效果 訪問http://localhost/ 應(yīng)該可以看到原來的tomcat默認(rèn)頁面,。 寫一個(gè) index.jsp 代碼 <html> <title> test jsp </title> <% String showMessage="Oh My God!"; out.print(showMessage); %> </html> 放在d:/server/www下面,,訪問 http://www. 頁面顯示Hello World! 就成功了 第三部分,部分相關(guān)性能優(yōu)化及其它問題 如何使用server版jvm ,? Jvm動(dòng)態(tài)庫有client和server兩個(gè)版本,,分別針對(duì)桌面應(yīng)用和服務(wù)器應(yīng)用做了相應(yīng)的優(yōu)化,client版本加 載速度較快,,server版本加載速度較慢但運(yùn)行起來較快,。 在開始菜單 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 里面第一行寫的是 -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)上有人說在j2sdk1.3開始就不需要配置了,而本例中實(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í)的很多問題 關(guān)于apache2在win平臺(tái)上的一個(gè)小問題 可能apache的日志中常出現(xiàn)類似如下的提示 [error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover. 這是由于apache 使用了微軟的AcceptEx()調(diào)用的緣故,,禁用掉即可,,此問題只會(huì)出現(xiàn)在win平臺(tái)且apache的2.0.49和更高版本上,出現(xiàn)錯(cuò)誤的大概原因是 防火墻和防病毒軟件所導(dǎo)致,,導(dǎo)致結(jié)果也有好幾種,,像apache占用很高cpu資源或者網(wǎng)站頁面無法打開。 解決方法修改d:\server\apache2\conf\httpd.conf中的mpm部分 代碼 <IfModule mpm_winnt.c> ThreadsPerChild 250 MaxRequestsPerChild 0 Win32DisableAcceptEx #添加這一行即可,,做過壓力測(cè)試,,對(duì)性能影響很小,可以忽略 </IfModule> |
|