1. 整合Apache和Tom
cat可以提升對靜態文件的處理性能、利用 Web 服務器來做負載均衡以及容錯、無縫的升級應用程序。
2. 三種方法:
1) 利用apache自帶的mod_proxy模塊使用代理技術連接Tomcat。在配置之前確保是否使用的是apache的版本是2.2.x。因為apache2.2.x對mod_proxy這個模塊進行了重寫,大大增強了其功能和其穩定性。http_proxy模式是基於HTTP協議的代理。因此要求Tomcat必須提供HTTP服務,換句話說必須是啟用Tomcat的HTTP Connector。
2) 利用ajp_proxy 連接方式其實和http_proxy 方式是一樣,但是由於mod_proxy 所提供的功能,配置也是一樣的。但是采用proxy的連接方式。只需要在apache加載所需要的模塊,mod_proxy相關的模塊有mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so,其中mod_proxy_ajp.so 只在apache2.2.x 中才有。如果是采用http_proxy的方式則需要加載mod_proxy.so 和mod_proxy_http.so; 如果是采用ajp_proxy的連接方式則需要加載mod_proxy.so和mod_proxy_ajp.so 這兩個模塊
3) 利用jk(mod_jk的模塊),該方法是最常見的方式。jk本身用兩個版本分別是1和2,其中jk2已經被拋棄了。jk是通過AJP協議與Tomcat服務器進行通訊的,Tomcat默認的AJP Connector的端口是8009。jk本身提供一個監控集群管理的頁面Jkstatus ,通過jkstatus 可以監控jk的工作狀態及對到tomcat的連接進行設置。
3. jk原理:
apache和tomcat之間通信通過worker進行(由Tomcat使用Server.xml文件中Connector的標簽來定義其端口和協議),通過mod_jk的模塊和tomcat通信。整個過程其實就是讓apache的httpd.conf文件調用mod_jk.conf,mod_jk.conf調用workers.properties,最後配置虛擬主機。
文件說明
mod_jk.conf:主要定義mod_jk模塊的位置以及mod_jk模塊的連接日志設置,還有定義worker.properties文件的位置。
worker.properties:定義worker的參數,主要是連接tomcat主機的地址和端口信息。如果Tomcat與apache不在同一台機器上,或者需要做多台機器上tomcat的負載均衡只需要更改workers.properties文件中的相應定義即可。
4. 安裝apache、tomcat、jdk(略)
5. 安裝mod_jk.so模塊
tar xzf tomcat-connectors-1.2.30-src.tar.gz
cd tomcat-connectors-1.2.30-src/native/
./configure --with-apxs=/usr/local/apache/bin/apxs
make
cd apache-2.0
/usr/local/apache/bin/apxs -n jk -i mod_jk.so
ll /usr/local/apache/modules/mod_jk.so
6. 修改配置文件
if [ "$(hostname -i)" == "127.0.0.1" ];then
echo "OK"
else
sed -i "s/127.0.0.1.*$/127.0.0.1 `hostname` localhost.localdomain localhost/g" /etc/hosts
fi
sed -i 's/User daemon/User www/g' /usr/local/apache/conf/httpd.conf
sed -i 's/Group daemon/User www/g' /usr/local/apache/conf/httpd.conf
sed -i 's/#ServerName www.example.com:80/ServerName 127.0.0.1:80/g' /usr/local/apache/conf/httpd.conf
cat >> /usr/local/apache/conf/httpd.conf <<EOF
Include conf/extra/httpd-vhosts.conf
LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf
EOF
cat > /usr/local/apache/conf/extra/httpd-vhosts.conf <<EOF
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/data/xxx"
ServerName 192.168.1.110
JkMount /* worker1
JkUnMount /images/* worker1
JkUnMount /img/* worker1
JkUnMount /js/* worker1
JkUnMount /css/* worker1
ErrorLog "/usr/local/apache/logs/xxx_error.log"
CustomLog "/usr/local/apache/logs/xxx_access.log" common
<Directory "/data/xxx">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.jsp
</Directory>
</VirtualHost>
EOF
cat > /usr/local/apache/conf/mod_jk.conf << EOF
JkWorkersFile /usr/local/apache/conf/workers.properties
# Where to put jk logs
JkLogFile /usr/local/apache/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"
EOF
cat > /usr/local/apache/conf/workers.properties << EOF
# Defining a worker named worker1 and of type ajp13
worker.list=worker1
# Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
EOF
vi /usr/local/tomcat/conf/server.xml
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<Context path="" docBase="/data/xxx" debug="0" reloadable="true" crossContext="true"/>