希望通過 www.example.com 直接訪問部署在非默認目錄的 Java Web 項目,而非 www.example.com/projectName 或 IP:8080/projectName。
編輯 $CATALINA_HOME/conf/server.xml,在 <Engine> 內添加 <Host>:
<Host name="www.example.com" appBase="/opt/mywebapps"
unpackWARs="true" autoDeploy="true">
<Alias>example.com</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
name:綁定域名appBase:項目部署根目錄(非 webapps)Alias:支持裸域名訪問在 appBase 目錄下創建 ROOT.war 或 ROOT/ 目錄,Tomcat 會自動將其映射為根路徑 /。
server.xml 中 <Connector port="80" .../>(需 root 權限或 authbind)proxy_pass https://127.0.0.1:8080;,同時實現 SSL 終結、靜態資源緩存等。若不想暴露 Tomcat 默認頁面,可刪除 webapps/ROOT 或在 server.xml 中將默認 <Host name="localhost"> 的 appBase 指向空目錄。
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 域名訪問 404 | 項目未部署為 ROOT | 重命名為 ROOT.war 或配置 Context path="" |
| 靜態資源 404 | Nginx 未代理靜態路徑 | 添加 location /static/ { alias /opt/mywebapps/ROOT/static/; } |
| Session 丟失 | 多實例無 Session 共享 | 配置 Redis Session Manager 或 Sticky Session |
curl -I www.example.com 返回 200遵循「獨立 Host + ROOT 部署 + 反向代理隱藏端口」三步走,輕松實現專業級域名直訪體驗。