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

Tomcat 多端口多應用部署配置指南:Service 引擎隔離實現

     編輯:Java 程式設計入門

核心架構理解

Tomcat 核心組件層級:Server → Service → Connector + Engine → Host → Context

  • Server:整個 Tomcat 實例,包含一或多個 Service
  • Service:獨立的連接器 + 引擎組合,對應一個服務入口
  • Connector:監聽特定端口、協議 (HTTP/AJP)
  • Engine:請求處理管道,包含 Host
  • Host:虛擬主機,對應應用基礎目錄 (appBase)
  • Context:單一 Web 應用

預設結構 (server.xml 片段)


<Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" redirectPort="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps">
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs" prefix="localhost_access_log" suffix=".txt"
                 pattern="%h %l %u %t "%r" %s %b"/>
        </Host>
    </Engine>
</Service>

實現多端口隔離:新增 Service

  1. 建立獨立應用目錄結構 (對應新 Service 的 appBase):

D:\Tomcat5.0\conf\Catalina\localhost\          ← 原有 Context 配置
D:\Tomcat5.0\conf\Fantasysoft\localhost\       ← 新 Service Context 配置

將需部署在新端口的應用 Context XML 複製/移動至 Fantasysoft\localhost\。

  1. server.xml 新增 Service 節點 (關鍵:name、Connector port、Engine name 唯一):

<Service name="Fantasysoft">
    <Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000" redirectPort="8453"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"/>
    <Connector port="8019" protocol="AJP/1.3" redirectPort="8453"/>
    <Engine name="Fantasysoft" defaultHost="localhost">
        <Host name="localhost" appBase="webapps">
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs" prefix="fantasysoft_access_log" suffix=".txt"
                 pattern="%h %l %u %t "%r" %s %b"/>
        </Host>
    </Engine>
</Service>
  1. 重啟 Tomcat,驗證:
  • https://localhost:8080/ → 原有應用
  • https://localhost:8090/ → 新 Service 應用 (讀取 conf/Fantasysoft/localhost/ 下 Context)

進階場景:多虛擬主機 + 多端口


<Service name="API-Service">
    <Connector port="8081" ... />
    <Engine name="API-Service" defaultHost="api.example.com">
        <Host name="api.example.com" appBase="webapps-api">
            <Alias>api.example.org</Alias>
            <Context path="" docBase="ROOT" />
        </Host>
        <Host name="admin.example.com" appBase="webapps-admin">
            <Context path="/admin" docBase="admin-war" />
        </Host>
    </Engine>
</Service>

關鍵配置對照表

屬性Catalina (預設)Fantasysoft (新增)說明
Service nameCatalinaFantasysoft全域唯一,對應 conf/ 子目錄名
HTTP Connector port80808090對外服務端口,防火牆需放行
AJP Connector port80098019反向代理 (Nginx/Apache) 連接端口
redirectPort84438453SSL 重導向端口,避免衝突
Engine nameCatalinaFantasysoft需與 Service name 一致
Host appBasewebappswebapps (可改)應用 WAR/目錄基礎路徑
Context 配置目錄conf/Catalina/localhost/conf/Fantasysoft/localhost/自動掃描部署描述符

常見問題

  1. 端口衝突:netstat -an | findstr 8090 檢查,修改 port 或關閉佔用進程
  2. 應用不生效:確認 Context XML 放在正確的 conf//localhost/ 目錄
  3. 日誌混雜:各 Service 配置獨立 AccessLogValve prefix 區分
  4. 資源競爭:共用 JVM,堆記憶體、執行緒池、資料庫連接池互相影響,高負載建議分實例部署

現代替代方案

  • 多實例部署:複製 Tomcat 目錄,修改 server.xml 端口、catalina.sh/bat 基礎目錄,systemd 管理多服務
  • 容器化:Docker 運行多個 Tomcat 容器,端口映射、資源配額、網絡隔離原生支援
  • Spring Boot 嵌入式:每個微服務獨立 JAR,自帶 Tomcat,無需外部容器配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved