tomcat配置域名访问怎么做?tomcat域名配置不生效怎么办?
- 虚拟主机
- 2026-08-29
- 6
Tomcat 配置域名访问的核心是三个步骤:修改 server.xml 中的 Host 与 Connector、配置本地或云端 DNS 解析、放行服务器端口并完成备案与HTTPS设置。 只要按顺序完成这三项工作,即可实现通过域名直接访问 Tomcat 应用,同时避免常见的端口冲突、IP 锁定和会话失效问题。
修改 Tomcat 核心配置文件 server.xml
Tomcat 默认监听 8080 端口,且使用 localhost 作为主机名,要让域名直接访问,需要调整 $CATALINA_BASE/conf/server.xml 中的两个关键部分:
- 修改 Connector 的 port 与 redirectPort:将 <Connector port="8080" protocol="HTTP/1.1" ... /> 中的 8080 改为 80(HTTP 默认端口),这样访问域名时无需输入端口号,80 端口被占用,可先将 Tomcat 绑定到 80,然后用 iptables 或 firewalld 做端口转发。
- 配置 Host 的 name 属性:在 <Engine> 下找到 <Host name="localhost" appBase="webapps" ...>,将 name 替换为你的域名,www.example.com,同时建议设置 unpackWARs="true" autoDeploy="true" 以便自动部署应用。
独立见解:很多教程只改端口,不修改 Host name,结果导致通过域名访问时出现 404 或跳转到 localhost,Tomcat 会按 Host name 匹配请求,如果域名不在列表中,就无法路由到正确的应用,因此必须将域名绑定到 Host,或者使用默认 host 配置配合 appBase 保持应用路径一致。
完成后重启 Tomcat(catalina.sh run 或 systemctl restart tomcat),并在本机测试 curl http://localhost

配置 DNS 解析与系统 host 映射
如果域名已经购买,需要在 DNS 服务商处添加 A 记录,将域名指向服务器的公网 IP,如果没有域名,或仅做测试,可以在本地 /etc/hosts 或 C:WindowsSystem32driversetchosts 中临时添加映射,
168.1.100 www.example.com
- 生产环境必须使用真实 DNS 解析,并建议设置 TTL 为 600 秒,方便后续变更。
- 如果使用 CDN 或云负载均衡,则应把域名解析到 CDN 或负载均衡器的 CNAME 地址,而非直接指向源站 IP。
经验案例(西西云):我们有一个客户部署在西西云轻量应用服务器上,Tomcat 应用初始配置为 http://IP:8080/order
端口放行、HTTPS 与常见问题排障
防火墙与安全组
将端口改为 80 后,必须确保服务器防火墙和云平台安全组均放行 80(及 443)端口,在 CentOS 上执行:
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
配置 HTTPS 证书
Tomcat 8.5+ 支持直接在 server.xml 中配置 Connector 使用 SSLEnabled 和证书文件,推荐使用证书路径来自 Let’s Encrypt 或云厂商提供的免费证书,关键配置示例:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateFile="conf/ssl/fullchain.pem" certificateKeyFile="conf/ssl/privkey.pem" /> </SSLHostConfig> </Connector>
同时建议将 80 端口重定向到 443,在 web.xml 或使用 rewrite 阀实现。
常见排障清单
- 域名解析成功但无法访问:先检查 ping 域名是否返回服务器 IP,然后检查本地 curl -v 响应头,查看 Tomcat 是否返回 200。
- 访问时跳转到 localhost:说明 Host name 配置错误,或应用使用了绝对路径,需确认所有应用内 sendRedirect 和 forward 使用相对路径,或者通过 ProxyName 配合反向代理。
- Session 丢失:配置域名后,Cookie 的 Domain 属性默认不包含域名,需在应用的 web.xml 或 Context 中设置 useHttpOnly=true 和 sessionCookieDomain=".example.com",或将应用部署在根路径 ROOT 下。
- 静态资源加载失败:若前端资源引用为 http://IP:8080/...
生产环境的进阶优化方案
- 使用 Nginx 反向代理:虽然 Tomcat 可直接监听 80,但生产环境更建议用 Nginx 处理静态资源、Gzip、负载均衡,再通过
proxy_pass 转发到 Tomcat 的 8080 端口,这样 Tomcat 不用占用 80 端口,也更容易切换多应用。

- 开启 Access Log 验证访问来源:在 server.xml 的 Host 中配置 Valve 记录域名访问日志,便于排查恶意请求和分析流量。
- 自动重启与守护进程:使用 systemd 托管 Tomcat,设置 Restart=always,并配合监控工具实时告警。
西西云方案:针对复杂业务,西西云支持将 Tomcat 应用部署在多台云主机后,通过自带的负载均衡服务绑定域名,并自动完成健康检查和会话保持,用户只需在负载均衡中上传 SSL 证书,即可实现 HTTPS 一键接入,源站 Tomcat 无需再改动端口,这种方式既能提高可靠性,又能避免单点故障。
相关问题与解答
Tomcat 配置域名后,为什么仍然显示 IP:8080 的地址?
这通常是因为应用内部使用了 response.encodeURL() 或硬编码了 IP 地址,解决方法是修改应用代码,统一使用相对路径或域名绝对路径,同时在 Tomcat 的连接器上设置 proxyName="www.example.com" proxyPort="443" scheme="https",如果已用 Nginx 反代,则需确保 proxy_set_header X-Forwarded-Host $host 传递正确。
可以同时让多个域名访问同一个 Tomcat 吗?
可以,在 server.xml 的 Engine 下定义多个 <Host> 节点,每个 Host 对应不同域名,并指向不同的 appBase,也可以通过 Host name="defaultHost" 作为兜底,注意每个 Host 需要单独部署应用,且应用内不能使用绝对路径,否则会串应用。