🏡作者主頁:點擊!?
Tomcat服務器📝專欄:點擊!
🐧Linux高級管理防護和群集專欄:點擊!
??創作時間:2025年3月18日14點14分
最近在折騰 Tomcat 的時候,遇到了一個需求:需要在一臺服務器上跑多個網站,每個網站用不同的域名訪問。乍一看,這不就是虛擬主機的活兒嘛!但對 Tomcat 的虛擬主機配置不太熟,查了不少資料,踩了幾個坑,終于搞定了。于是就想著把整個過程整理下來,分享給有類似需求的小伙伴,希望能少走彎路。
這篇文章主要講的是在 CentOS 系統上,如何一步步配置 Tomcat 的虛擬主機。內容很簡單,從目錄準備到配置文件修改,再到重啟和測試,手把手帶你搞定。
1. 準備虛擬主機的目錄和內容
為每個虛擬主機創建獨立的目錄,并放置測試文件。
創建目錄
mkdir -p /var/www/site1
mkdir -p /var/www/site2
添加測試文件
echo "Welcome to Site 1" > /var/www/site1/index.html
echo "Welcome to Site 2" > /var/www/site2/index.html
2. 修改 Tomcat 的 server.xml
配置文件
編輯 Tomcat 的 server.xml
文件:
vim $CATALINA_HOME/conf/server.xml
找到 <Engine>
標簽(通常在 <Service name="Catalina">
下),并在其中添加兩個 <Host>
配置塊。
修改后的配置示例:
<Engine name="Catalina" defaultHost="localhost"><!-- 默認的 localhost 配置 --><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"><Context path="" docBase="${catalina.home}/webapps/ROOT" /></Host><!-- 虛擬主機 1 --><Host name="www.site1.com" appBase="" unpackWARs="true" autoDeploy="true"><Context path="" docBase="/var/www/site1" /></Host><!-- 虛擬主機 2 --><Host name="www.site2.com" appBase="" unpackWARs="true" autoDeploy="true"><Context path="" docBase="/var/www/site2" /></Host></Engine>
配置說明
name
:虛擬主機的域名,例如www.site1.com
和www.site2.com
。appBase
:設置為空字符串""
,因為我們直接指定了docBase
。 對應應用部署的目錄docBase
:虛擬主機的文檔根目錄,分別為/var/www/site1
和/var/www/site2
。path
:設置為""
,表示虛擬主機的根路徑(/
)。
補充說明:Engine節點 是核心組件之一 用于管理虛擬主機 下面可以定義多個host節點
訪問測試
4. 重啟 Tomcat
重新啟動 Tomcat 以應用新的配置:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
5. 測試虛擬主機
在瀏覽器中訪問以下地址:
訪問 http://www.site1.com:8080
,應顯示 Welcome to Site 1
。
訪問 http://www.site2.com:8080
,應顯示 Welcome to Site 2
。
注意事項
- 防火墻配置 如果您的 Tomcat 運行在非默認端口(如 80),需要確保防火墻允許該端口的流量。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
- DNS 配置 如果在生產環境中使用,需要在 DNS 服務器中配置
www.site1.com
和www.site2.com
的域名解析到服務器的公網 IP。 - 生產環境建議
-
- 使用 Apache 或 Nginx 作為反向代理,將域名請求轉發到 Tomcat 的虛擬主機配置 HTTPS 以保證安全性。
總結
搞定之后回頭看,其實配置 Tomcat 虛擬主機并不難,關鍵是要細心,別漏掉小細節。比如:
- 目錄路徑:一定要確認
docBase
指向的目錄存在,并且權限設置正確。 - 防火墻:別忘了開放 Tomcat 的端口,不然你本地測得好好的,外網卻訪問不了。
- DNS 配置:如果是線上環境,域名解析必須指向服務器的公網 IP。
- 安全性:生產環境建議用 Nginx 或 Apache 做反向代理,別直接暴露 Tomcat,順便把 HTTPS 配置上。