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

Apache Proxy 整合多 Tomcat 實例:虛擬主機代理轉發架構實戰

     編輯:Java 相關知識

場景痛點

  • 單 Tomcat 運行 10+ 應用,頻發 OOM
  • 各應用擁有二級域名(www.aaa.com, oa.aaa.com, sales.aaa.com)
  • 原用 JK Connector,配置複雜

架構方案

  1. 多 Tomcat 實例,端口隔離(8080, 8081...)
  2. 各實例配置專屬虛擬主機
  3. Apache mod_proxy 代理轉發,按域名路由至對應端口
  4. 移除 JK Connector,簡化架構

Tomcat 配置要點

<!-- Tomcat 1: server.xml (port=8080) -->
<Host name="www.aaa.com" appBase="webapps_www" />
<Host name="oa.aaa.com" appBase="webapps_oa" />

<!-- Tomcat 2: server.xml (port=8081) -->
<Host name="sales.aaa.com" appBase="webapps_sales" />

測試:https://oa.aaa.com:8080/ 直接訪問驗證。

Apache httpd.conf 核心配置

1. 載入模塊

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

2. 虛擬主機代理映射

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.aaa.com
    ProxyPass / https://www.aaa.com:8080/
    ProxyPassReverse / https://www.aaa.com:8080/
</VirtualHost>

<VirtualHost *:80>
    ServerName oa.aaa.com
    ProxyPass / https://oa.aaa.com:8080/
    ProxyPassReverse / https://oa.aaa.com:8080/
</VirtualHost>

<VirtualHost *:80>
    ServerName sales.aaa.com
    ProxyPass / https://sales.aaa.com:8081/
    ProxyPassReverse / https://sales.aaa.com:8081/
</VirtualHost>

關鍵指令解析

指令作用
ProxyPass將請求轉發至後端服務器
ProxyPassReverse修正後端響應中的 Location/Header,確保重定向正確
NameVirtualHost啟用基於域名的虛擬主機

優缺點權衡

生產建議

  • 靜態資源走 Apache 直接服務(ProxyPass /static ! 排除代理)
  • 啟用 mod_proxy_balancer 實現集群負載均衡
  • 配置健康檢查自動剔除故障節點
  • 監控後端 Tomcat 連接池、線程池指標
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
優點缺點
架構清晰,實例隔離故障域損失 Apache 靜態文件服務性能優勢
配置簡單,無 JK 複雜性需額外維護 Apache 進程
擴展靈活,新增實例只加 VirtualHost雙層轉發增加微小延遲