場景痛點
- 單 Tomcat 運行 10+ 應用,頻發 OOM
- 各應用擁有二級域名(www.aaa.com, oa.aaa.com, sales.aaa.com)
- 原用 JK Connector,配置複雜
架構方案
- 多 Tomcat 實例,端口隔離(8080, 8081...)
- 各實例配置專屬虛擬主機
- Apache mod_proxy 代理轉發,按域名路由至對應端口
- 移除 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 | 啟用基於域名的虛擬主機 |
優缺點權衡