WEB
服務器解決方案
Apache+Tomcat
?????????????????????????????????????????????????????? ?? ??? ??? ? 作者:張浦
??????????????????????????????????????????????????????? ??? ??? ???
?
1. 概述
1.1. 本文目的
描述建立簡單高效的 apache 服務器,應用于集成 tomcat 服務。
即: apache+jk1.2+tomcat 部署方案中 apache 的安裝配置和優化
1.2. 環境及文檔約定
操作系統: RedHat AS 4 update 1
硬件環境:普通
PC C4
設系統的 IP 地址為: $IP
2. JDK 安裝配置
JDK 官方網站: http://java.sun.com
2.1. 安裝 JDK
JDK
版本:
jdk
下載地址:
http://192.18.108.219/ECom/EComTicketServlet/BEGIN5EA4351D3E051D464E9716D18FE4FF31
/-2147483648/2093779515/1/798890/798650/2093779515/2ts+/westCoastFSEND
/jdk-1.5.0_11-oth-JPR/jdk-1.5.0_11-oth-JPR:3/jdk-1_5_0_11-linux-i586-rpm.bin
# cd /tools
# wget http://192.18.108.219/ECom/EComTicketServlet/BEGIN5EA4351D3E051D464E9716D18FE4FF31/
-2147483648/2093779515/1/798890/798650/2093779515/2ts+/westCoastFSEND
/jdk-1.5.0_11-oth-JPR/jdk-1.5.0_11-oth-JPR:3/jdk-1_5_0_11-linux-i586-rpm.bin
# cd /tools
# chmod +x jdk-1_5_0_11-linux-i586-rpm.bin
# ./ jdk-1_5_0_11-linux-i586-rpm.bin
# rpm –ivq jdk-1_5_0_11-linux-i586.rpm
2.2. 設置系統 JAVA 環境
Java
環境的設置是為了支持
tomcat
服務器的運行,主要需要設置的環境變量是
JAVA_HOME,
即
jdk
的安裝路徑。默認安裝
jdk
的目錄是
/usr/java/ jdk
設置環境變量到系統環境配置文件 /etc/profile
# vi /etc/profile
加入:
exprot
JAVA_HOME=/usr/java/ jdk
# source /etc/profile
3. TOMCAT 安裝配置
Tomcat 官方網站: http://tomcat.apache.org/
3.1. 獲取 Tomcat
本文使用
Tomcat-
下載地址: http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.tar.gz
如果目標服務器可以上公網,可以直接在目標服務器下載該版本 tomcat ,標準發行版本比較小,只有幾兆而已。
$ cd /tools
$ wget http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.tar.gz
3.2. 安裝 Tomcat
3.2.1. 安裝
首先在獲取 tomcat 軟件版本后,直接解壓,并拷貝到對應的安裝目錄就可以了,一般 linux 下安裝目錄可以設置在 /usr/local 下面,現在設 Tomcat 安裝目錄為 $CATALINA_HOME 。
# cd /tools
# tar –xzvf apache-tomcat-
# cp apache-tomcat-
即:
$CATALINA_HOME=/usr/local/tomcat-
3.2.2. 驗證安裝
請確保系統的 8080 端口沒有被占用,因為 tomcat 默認使用 8080 端口。
# $CATALINA_HOME/bin/startup.sh
啟動瀏覽器(如 IE ),輸入 http://$IP:8080
如果顯示了有 tomcat 圖標的 tomcat 首頁的話,表示 tomcat 服務器正常 .
3.2.3. 常見問題
1.???????? 確保服務器操作系統防火墻關閉
2.???????? 確保端口沒有被其他程序占用,驗證方法是 :
關閉 tomcat 服務器( $CATALINA_HOME/bin/shutdown.sh )
telnet $IP 8080
如果仍然能連通,說明 8080 端口已經被其他程序使用。
3.3. 配置與優化
我的其他文章參考: TOMCAT-5.5.X優化配置
3.4. APR 整合
我的其他文章參考: TOMCAT-5.5.X整合APR
4. APACHE 安裝配置
4.1. 獲取 Apache 軟件
Apache
本例使用 linux source 包版本
可以直接下載:
# cd /tools
# wget http://httpd.apache.org/xxxx/xxxx/
apache-
4.2. Apache 安裝配置與優化
我的其他文章參考: Apache安裝配置與優化
5. APACHE+TOMCA 整合配置
官方參考: http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
5.1. 獲取 JK 軟件
下載地址:
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/v1.2.0/src/
jakarta-tomcat-connectors-jk-1.2.0-src.tar.gz
# cd /tools
# wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/v1.2.0/src/
jakarta-tomcat-connectors-jk-1.2.0-src.tar.gz
5.2. 安裝編譯 JK
# cd /tools
# tar –xzvf jakarta-tomcat-connectors-jk-
# cd tomcat-connectors-
# cd native
# ./configure --with-apxs=$APACHE_HOME/bin/apxs? // 使用 apache 的 apxs
# make
# make install
成功安裝完成后,會在 $APACHE_HOME/modules 中發現 mod_jk.so 文件。
5.3. 配置 JK 連接 APACHE 和 TOMCAT
1.? 配置 worker.properties
在 $APACHE_HOME/conf 下建立 worker.properties
# vi worker.properties
寫入:
?????? # Define 1 real worker using ajp13
worker.list=tomcat
# Set properties for worker1 (ajp13)
worker.tomcat.type=ajp13
worker.tomcat.host=127.0.0.1
worker.tomcat.port=8009
worker.tomcat.cachesize=10
worker.tomcat.cache_timeout=600
?? ?
2.? 配置 JK 連接
配置 $APACHE_HOME/conf 下 httpd.con 文件
# vi httpd.conf
寫入:
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile /usr/local/apache
# Where to put jk logs
JkLogFile
/usr/local/apache
# Set the jk log level [debug/error/info]
JkLogLevel error
# 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"
JkShmFile /usr/local/apache2/logs/mod_jk.shm
# Send jsp,servlet for context * to worker named tomcat
JkMount /dwr/* tomcat
JkMount /*.jsp tomcat
JkMount /*.mvc tomcat
JkMount /*.do tomcat
JkMount /captcha.jpg tomcat
JkMount /j_acegi_security_check tomcat
JkMount /j_acegi_logout tomcat
JkMount /admin/adminlogout tomcat
JkMount /WEB-INF/* tomcat
5.4. 驗證配置
確保 tomcat 配置正確,并能正常啟動。
啟動 tomcat ,然后啟動 apache ,測試是否配置成功。
??????
6. 完整的配置參考
6.1. 環境變量
export?PATH = $JAVA_HOME / bin : $PATH
export?JAVA_OPTS = " $CATALINA_OPTS?-Xms700m?-Xmx700m
-Djava.library.path=/usr/local/apr/lib "
6.2. Tomcat 相關配置文件
Server.xml :
?? < GlobalNamingResources >
???? <!-- ?Used?by?Manager?webapp? -->
???? < Resource? name ="UserDatabase" ?auth ="Container"
??????????????type ="org.apache.catalina.UserDatabase"
???????description ="User?database?that?can?be?updated?and?saved"
???????????factory ="org.apache.catalina.users.MemoryUserDatabaseFactory"
??????????pathname ="conf/tomcat-users.xml" ? />
?? </ GlobalNamingResources >
?? < Service? name ="Catalina" >
???? < Connector? port ="8009"
???????????????maxTreads ="500" ?minSpareThreads ="10" ?maxSpareThreads ="50"
???????????????acceptCount ="50" ?connectionTimeout ="60000"
???????????????enableLookups ="false" ?redirectPort ="8443" ?protocol ="AJP/1.3" />
???? < Engine? name ="Catalina" ?defaultHost ="localhost" >
?????? < Realm? className ="org.apache.catalina.realm.UserDatabaseRealm"
?????????????resourceName ="UserDatabase" ? />
?????? < Host? name ="localhost" ?appBase =""
???????unpackWARs ="true" ?autoDeploy ="true"
???????xmlValidation ="false" ?xmlNamespaceAware ="false" >
???????? < Context? path ="" ?docBase ="/www/xxxxx/site/web" ?reloadable ="true" ?debug ="0" />
?????? </ Host >
???? </ Engine >
?? </ Service >
</ Server >
6.3. apache 相關配置文件
1.
httpd.conf
ServerRoot?/usr/local/apache2.0.59
DocumentRoot?/www/xxxxx/site/web
DirectoryIndex?index.jsp?index.htm?index.html
User??webuser
Group?cvs
< IfModule? prefork.c >
ServerLimit??????800
MaxClients???????800
StartServers?????5
MinSpareServers??5
MaxSpareServers?10
</ IfModule >
?
< IfModule? worker.c >
StartServers?????????2
MaxClients?????????150
MinSpareThreads?????25
MaxSpareThreads?????75
ThreadsPerChild?????25
MaxRequestsPerChild??0
</ IfModule >
?
MaxRequestsPerChild?0
ErrorLog?logs/error_log
< Directory? />
????Options?FollowSymLinks
????AllowOverride?None
</ Directory >
2.
conf/includes/deflate.conf
#?Compress?everything?except?images
< Location? />
#?Insert?filter
SetOutputFilter?DEFLATE
#?Netscape?4.x?has?some?problems

BrowserMatch?^Mozilla/4?gzip-only-text/html
#?Netscape?4.06-4.08?have?some?more?problems
BrowserMatch?^Mozilla/4\.0[678]?no-gzip
#?MSIE?masquerades?as?Netscape,?but?it?is?fine
BrowserMatch?\bMSIE?!no-gzip?!gzip-only-text/html
#?Don't?compress?images
SetEnvIfNoCase?Request_URI?\
\.(?:gif|jpe?g|png)$?no-gzip?dont-vary
#?Make?sure?proxies?don't?deliver?the?wrong?content
Header?append?Vary?User-Agent?env=!dont-vary
</ Location >
3.
conf/includes/ mod_jk.conf
LoadModule?jk_module?modules / mod_jk . so
# ?Where?to?find?workers.properties
JkWorkersFile? / usr / local / apache2 . 0.59 / conf / workers . properties
# ?Where?to?put?jk?logs
JkLogFile? / usr / local / apache2 . 0.59 / logs / mod_jk . log
# ?Set?the?jk?log?level?[debug/error/info]
JkLogLevel?error
# ?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 "
JkShmFile? / usr / local / apache2 / logs / mod_jk . shm
?
# ?Send?jsp,servlet?for?context?*?to?worker?named?tomcat
JkMount? / dwr /* ?tomcat
JkMount? /*. jsp?tomcat
JkMount? /*. mvc?tomcat
JkMount? /*. do ?tomcat
JkMount? / captcha . jpg?tomcat
JkMount? / j_acegi_security_check?tomcat
JkMount? / j_acegi_logout?tomcat
JkMount? / admin / adminlogout?tomcat
JkMount? / WEB - INF /* ?tomcat
4.
conf/workers.properties
worker.list = tomcat
#?Set?properties?for?worker1?(ajp13)
worker.tomcat.type = ajp13
worker.tomcat.host = 127.0.0.1
worker.tomcat.port = 8009
worker.tomcat.cachesize = 10
worker.tomcat.cache_timeout = 600