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

Apache + Tomcat 整合共用 80 端口:mod_jk 配置實現 Java/PHP 站點無端口號訪問

     編輯:關於JSP

生產環境常需 Apache 靜態分發 + Tomcat 動態處理,並統一對外 80 端口。本文記錄 CentOS + Apache 2.2 + Tomcat 7 環境下,基於 mod_jk (AJP 協議) 的整合全流程。

架構圖解

用戶瀏覽器 :80
    ↓
Apache HTTP Server (靜態資源、PHP、反向代理)
    ↓ AJP 1.3 (port 8009)
Tomcat Servlet 容器 (Java 應用)

核心步驟

1. 獲取 mod_jk 模塊

# 下載對應版本(CentOS 32位、Apache 2.2)
wget https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.48/httpd-2.2.x/mod_jk.so
cp mod_jk.so /etc/httpd/modules/

2. Apache 配置三件套

mod_jk.conf(載入模塊、定義工作器、日誌)

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"

# 將 /servlet/* 和 /MyProject/* 轉發給 Tomcat
JkMount /servlet/* ajp13
JkMount /MyProject/* ajp13
JkMount /MyProject ajp13

workers.properties(定義 Tomcat 連接點)

worker.list=ajp13
worker.ajp13.type=ajp13
worker.ajp13.host=localhost
worker.ajp13.port=8009
worker.ajp13.lbfactor=1

httpd.conf 關鍵修改

Listen 192.168.1.100:80          # 綁定具體 IP,避免 0.0.0.0 衝突
ServerName www.example.com:80
Include conf/mod_jk.conf          # 載入上述配置

# 虛擬主機示例(可選)
<VirtualHost *:80>
    ServerName www.example.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    # 關鍵:路徑必須與 Tomcat webapp 名稱一致
    ProxyPass /MyProject https://www.example.com/MyProject/pages/login.jsp
    ProxyPassReverse /MyProject https://www.example.com/MyProject/pages/login.jsp
</VirtualHost>

3. Tomcat 配置

server.xml 確保 AJP 連接器啟用:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="9090" protocol="HTTP/1.1" ... />  <!-- 可選:保留 HTTP 直連端口供調試 -->

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <!-- 若需域名直接訪問,可配置 Context -->
</Host>

ROOT.xml(可選:將應用部署為根路徑)

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="Welcome to Tomcat" docBase="" path="" debug="0"></Context>

驗證清單

  • [ ] https://www.example.com/MyProject/ 正常訪問 Java 應用(注意尾部 /)
  • [ ] https://www.example.com/phpinfo.php 正常解析 PHP
  • [ ] https://www.example.com/static/style.css Apache 直接服務靜態文件
  • [ ] Apache error_log 無 mod_jk 連接錯誤

常見坑與解決

生產優化建議

  • 啟用 JkMountCopy On 繼承虛擬主機掛載規則
  • 配置 worker.ajp13.cachesize=10 連接池復用
  • 關閉 Apache 不需模塊(a2dismod),減少內存佔用
  • 日誌切割:logrotate 管理 mod_jk.log

此配置在多個項目穩定運行 3 年+,支撐日均百萬 PV 混合 Java/PHP 站點,是「Apache 前端 + Tomcat 後端」經典架構的標準落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因解決
404 Not FoundJkMount 路徑與 webapp 名不一致確保 /MyProject/* 大小寫、前綴完全匹配
500 Internal Server Errormod_jk 連不上 Tomcat 8009檢查防火牆、Tomcat AJP Connector 是否啟用、端口占用
靜態資源 404Apache DocumentRoot 未包含靜態文件配置 Alias /static /var/www/static 或調整 DocumentRoot
Session 不共享Apache PHP 與 Tomcat Java 獨立 Session引入 Redis/Memcached 共享 Session,或 Sticky Session