0.說明
首先我們要弄明白mod_jk的作用是反向代理,而其實使用httpd.conf中的<VirtualHost>標簽就可以實現反向代理,為什么還要多搞個mod_jk那么麻煩做反向代理。
原因是<VirtualHost>標簽是http協議反向代理到8080端口,mod_jk是ajp協議反向代理到8009端口;http協議tcp只保持短時間連接要經常進行tcp三次握手四次揮手,ajp協議tcp保持長時間連接反向代理開銷就比較小。
1.下載
apache--yum install httpd -y
tomcat下載鏈接--http://tomcat.apache.org/
mod_jk下載鏈接--http://tomcat.apache.org/download-connectors.cgi
本文以httpd-2.2.15+tomcat-8.5.14+mod_jk-1.2.42為例
httpd通過yum安裝配置全為默認(由於最后一步驗證中我使用php進行驗證所以多裝了php,最簡lamp配置可參考鏈接;不需要apache解析php的話可以不用管php的,apache功能沒什么必要驗證)
tomcat直接下載接壓也未修改配置,安裝目錄/usr/myapp/apache-tomcat-8.5.14/,這兩者就不多輟述了。
2.mod_jk安裝配置
首先要清楚“Apache+Tomcat+mod_jk配置”到底要做什么,一是編譯生成mod_jk模塊,二是在apache中加載mod_jk並對其進行配置,三是在tomcat中修改配置以使其能接受mod_jk的轉發。
2.1編譯生成mod_jk模塊
編譯生成mod_jk.so,然后將其復制到httpd加載模塊默認的目錄/etc/httpd/modules
yum install httpd-devel -y #編譯生成apache擴展依賴apxs,如未安裝先安裝
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz tar -zxf tomcat-connectors-1.2.42-src.tar.gz cd tomcat-connectors-1.2.42-src/native/ ./configure --with-apxs=/usr/sbin/apxs make cp ./apache-2.0/mod_jk.so /etc/httpd/modules/
2.2在apache中加載mod_jk並對其進行配置
cd /etc/httpd/conf.d/ cat > mod_jk.conf << EOF # Load mod_jk module LoadModule jk_module modules/mod_jk.so # Add the module (activate this lne for Apache 1.3) # AddModule mod_jk.c # Where to find workers.properties JkWorkersFile conf.d/workers.properties # Where to put jk shared memory JkShmFile log/httpd/mod_jk.shm # Where to put jk logs JkLogFile log/httpd/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Send requests for context /examples to worker named worker1 JkMount /examples/* tomcat1 EOF
LoadModule行--加載mod_jk模塊
JkWorkersFile行--worker連接配置文件所在路徑,文件需要自己創建。路徑繼承了ServerRoot,所以完整路徑為/etc/httpd/conf.d/workers.properties;當然也可以使用決對路徑指定為其他任意位置。后邊幾個配置同此。
JkShmFile行--mod_jk共享內存文件在放位置,文件不需要自己創建
JkLogFile行--mod_jk日志存放位置,文件不需要自己創建
JkLogLevel行--mod_jk日志記錄級別
JkMount行--將/examples/開頭的請示都轉由tomcat1處理
JkWorkersFile行我們指定了worker的連接配置文件路徑,所謂worker就是在這里就是tomcat。所以我們要創建/etc/httpd/conf.d/workers.properties文件,並寫入tomcat的連接信息
cd /etc/httpd/conf.d cat > workers.properties << EOF # Define 1 real worker using ajp13 worker.list=tomcat1 # Set properties for worker1 (ajp13) worker.tomcat1.type=ajp13 worker.tomcat1.host=localhost worker.tomcat1.port=8009 EOF
worker.list行--worker列表。如有多個使用逗號(半角)隔開。
worker.tomcat1.type行--連接tomcat1使用的協議及版本。如果配置其他worker,將tomcat1改成相應worker名即可。
worker.tomcat1.host行--tomcat1的域名(包括/etc/hosts)或ip地址。如果配置其他worker,將tomcat1改成相應worker名即可。
worker.tomcat1.port行--tomcat1的ajp端口,默認8009。(tomcat監聽8009端口的意義就在這 里)。
說明:已驗證如上所述來配置多個worker是可以了,為了簡潔起見這里就不演示了。
2.3 tomcat配置jvmRoute
在workers.properties中我們指定了woker名為tomcat1,但在tomcat一側並不知道tomcat1就是指它。就比如別人給你起代號9527沒通知你,然后到你家跟你說找9527,你並不知道就是找你一樣。
我們需要找到$CATALINA_HOME/conf/server.xml中的Engine標簽,配置其jvmRoute屬性值為worker名(這里就是tomcat1)
2.4重啟apache和tomcat使配置生效
service httpd restart
cd /usr/myapp/apache-tomcat-8.5.14/bin #根據自己tomcat目錄修改路徑 ./shutdown.sh ./startup.sh
3 功能實現驗證
驗證apache功能正常--創建經典的phpinfo.php並訪問,如果正常顯示則說明apache原先的功能都正常。
驗證tomcat轉發成功--上邊mod_jk.conf中我們配置了/examples/開頭的請示都轉由tomcat1處理,如果我們訪問http://127.0.0.1/examples/其結果是tomcat顯示其webapps/examples目錄的內容則說明轉發成功。
3.1驗證apache功能正常
cd /var/www/html #進入apache默認主目錄 cat > phpinfo.php << EOF <?php phpinfo() ?> EOF
3.2驗證tomcat轉發成功
參考:
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
http://tomcat.apache.org/connectors-doc/common_howto/loadbalancers.html