首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Apache 與 Tomcat 整合全指南:mod_jk 配置、靜動態分離、Servlet/JSP 映射實戰

     編輯:Java 相關知識

前端 Apache + 後端 Tomcat:經典高性能架構

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 完整實戰配置。

環境準備

  • JDK 1.4.2+,環境變量 JAVA_HOME、PATH
  • Apache 2.0.52 安裝至 C:\Apache Group\Apache2
  • Tomcat 5.0 安裝至 C:\Apache Group\Tomcat 5.0
  • 下載 mod_jk-1.2.8-apache-2.0.52.so 放入 C:\Apache\ConnApaTom\

核心配置:httpd.conf


# 載入 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

工作器配置:workers.properties


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 連接器端口。

靜動態分離實戰:自定義 Web 根目錄 D:\www

1. Tomcat 配置:Context 片段修改文檔根

Tomcat 5.0+ 在 $CATALINA_HOME/conf/[enginename]/[hostname]/ 下創建 www.xml:

<Context path="" docBase="D:\www" />

將 Tomcat 根應用映射到 D:\www。

2. Apache 配置:DocumentRoot 同步


DocumentRoot "D:/www"
<Directory "D:/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

3. Servlet 程序專用目錄映射

在 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

4. Tomcat 端:對應 Context 片段

創建 servletProg.xml:

<Context path="/servletProg" docBase="D:\www\servletProg" debug="0" reloadable="true" />

驗證與常見問題

  1. 啟動順序:先啟 Tomcat(監聽 8009),再啟 Apache
  2. 測試靜態:訪問 https://localhost/test.html → Apache 直接服務
  3. 測試動態:訪問 https://localhost/examples/servlet/Hello → Tomcat 處理
  4. 測試 JSP:訪問 https://localhost/examples/test.jsp → Tomcat 編譯執行
  5. 404 排查:檢查 JkMount 路徑模式、workers.properties host/port、Tomcat Context path
  6. 權限問題:Windows 下確保 Apache/Tomcat 服務用戶對 D:\www 有讀執行權限
  7. 中文亂碼:Tomcat server.xml AJP 連接器添加 URIEncoding="UTF-8"

進階優化建議

  • 多工作器負載均衡:定義 worker.list=worker1,worker2、worker.loadbalancer.type=lb、worker.loadbalancer.balanced_workers=worker1,worker2
  • SSL 卸載:Apache 終結 HTTPS,AJP 明文轉發 Tomcat,JkOptions +ForwardKeySize +ForwardSSL
  • 靜態資源緩存:Apache mod_expires/mod_headers 設置長期 Cache-Control
  • 健康檢查:worker.worker1.connect_timeout=10000、worker.worker1.prepost_timeout=10000、worker.worker1.connection_ping_interval=60
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved