Connector port="8080",webapps/ 下有預設應用 (ROOT, docs, examples...)server.xml 降低升級/維護風險server.xml 結構:Server → Service → Connector + Engine → Host → Context
新增獨立 Service,擁有專屬 Connector、Engine、Host、appBase,完全隔離。
<Server port="8005" shutdown="SHUTDOWN">
<!-- 原有 Service (8080) 保持不變 -->
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" />
</Engine>
</Service>
<!-- 新增 ServiceA (80 端口) -->
<Service name="ServiceA">
<Connector port="80" protocol="HTTP/1.1"
maxThreads="200" connectionTimeout="20000"
redirectPort="8443" />
<Engine name="EngineA" defaultHost="localhost">
<Host name="localhost" appBase="webappsA" />
</Engine>
</Service>
</Server>
| 屬性 | 說明 | 本例值 |
|---|---|---|
Service name | 唯一標識,JMX 物件名一部分 | ServiceA |
Connector port | 監聽端口,< 1024 需 root/Admin 權限 | 80 |
Engine name | 請求處理管線名稱,需唯一 | EngineA |
Host appBase | 應用部署目錄 (相對 $CATALINA_BASE),勿與 webapps 同名 | webappsA |
Host name | 虛擬主機名,通常 localhost | localhost |
mkdir $CATALINA_BASE/webappsAwebappsA/ (如 myapp.war 或 myapp/)conf/Catalina/localhost/ 建立 myapp.xml Context 描述符微調shutdown.sh && startup.shhttps://localhost/myapp/ (80 端口無需帶 port)apt-get install authbind,touch /etc/authbind/byport/80,chmod 755 /etc/authbind/byport/80,啟動腳本加 authbind --deepsetcap 'cap_net_bind_service=+ep' /path/to/java (需檔案系統支援 capabilities)iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080localhost Host 名,Cookie Path 相同 → 設定 sessionCookiePath 或分離 Host 名webappsA **自動部署失效** → 檢查 Host autoDeploy="true"、deployOnStartup="true"-p 80:8080,單容器單進程,無需多 Serviceserver.port=8080,外層 Nginx/Ingress 代理在 server.xml 新增 Service 元素,配置專屬 Connector port="80"、Engine、Host appBase="webappsA",實現與預設 8080 服務完全隔離的 80 端口發布。生產環境強烈建議前置 Nginx 反向代理,統一處理 SSL、靜態資源、限流、日誌,Tomcat 專注業務邏輯。