Apache 擅長靜態資源(HTML/CSS/JS/圖片)高併發服務,Tomcat 專注動態業務邏輯(Servlet/JSP)。通過 mod_jk(AJP 1.3 協議)整合,實現靜動態分離、負載均衡、SSL 卸載。本文基於 Apache 2.0.52 + Tomcat 5.0 + mod_jk 1.2.8 完整實戰配置。
JAVA_HOME、PATHC:\Apache Group\Apache2C:\Apache Group\Tomcat 5.0mod_jk-1.2.8-apache-2.0.52.so 放入 C:\Apache\ConnApaTom\
# 載入 mod_jk 模塊
LoadModule jk_module "C:/Apache/ConnApaTom/mod_jk-1.2.8-apache-2.0.52.so"
# 模塊聲明(Apache 2.x 可省略 AddModule)
# AddModule mod_jk.c
# 工作器屬性文件
JkWorkersFile "C:/Apache Group/Apache2/ConnApaTom/workers.properties"
# 日誌
JkLogFile "C:/Apache Group/Apache2/ConnApaTom/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# 選項:轉發 SSL 密鑰大小、URI 兼容、不轉發目錄
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# 請求日誌格式
JkRequestLogFormat "%w %V %T"
# 映射規則:/examples 下的 Servlet 與 JSP 轉發給 worker1
JkMount /examples/servlet/* worker1
JkMount /examples/*.jsp worker1
# 靜態資源不轉發:直接由 Apache 服務
JkUnMount /examples/*.gif worker1
JkUnMount /examples/*.jpg worker1
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=1
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
關鍵:worker.list 必須包含 worker1,否則 Apache 啟動不會實例化該工作器。port=8009 對應 Tomcat server.xml 中 AJP 連接器端口。
Tomcat 5.0+ 在 $CATALINA_HOME/conf/[enginename]/[hostname]/ 下創建 www.xml:
<Context path="" docBase="D:\www" />
將 Tomcat 根應用映射到 D:\www。
DocumentRoot "D:/www"
<Directory "D:/www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
在 D:\www 下建 servletProg 存放 Servlet 類:
# Apache 端:Alias 映射虛擬路徑
Alias /servletProg/ "D:/www/servletProg/"
<Directory "D:/www/servletProg">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
# 轉發規則:/servletProg/servlet/* → Tomcat
JkMount /servletProg/servlet/* worker1
創建 servletProg.xml:
<Context path="/servletProg" docBase="D:\www\servletProg" debug="0" reloadable="true" />
https://localhost/test.html → Apache 直接服務https://localhost/examples/servlet/Hello → Tomcat 處理https://localhost/examples/test.jsp → Tomcat 編譯執行JkMount 路徑模式、workers.properties host/port、Tomcat Context pathD:\www 有讀執行權限server.xml AJP 連接器添加 URIEncoding="UTF-8"worker.list=worker1,worker2、worker.loadbalancer.type=lb、worker.loadbalancer.balanced_workers=worker1,worker2JkOptions +ForwardKeySize +ForwardSSLmod_expires/mod_headers 設置長期 Cache-Controlworker.worker1.connect_timeout=10000、worker.worker1.prepost_timeout=10000、worker.worker1.connection_ping_interval=60