如何用Apache httpd配置域名代理隐藏Tomcat 8080端口访问地址
基于Apache httpd的内网站点反代配置方案
前置准备
配置后地址栏跳转到http://www.example.com:8080/app的核心原因有两点:一是反向代理规则没有改写Tomcat返回的重定向响应头,二是Cookie路径、反代路径映射配置不全,导致应用触发主动跳转。以下是可直接落地的配置步骤:
- 首先在所有访问客户端、服务器本地的hosts文件追加域名映射(原有配置仅做了www域名的映射,缺少app域名的解析规则):
192.168.88.80 app.example.com - 打开Apache主配置文件
httpd.conf,取消以下模块前的注释,启用反代必需组件:
同时确认配置中已引入虚拟主机配置文件:LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule headers_module modules/mod_headers.so LoadModule rewrite_module modules/mod_rewrite.soInclude conf/extra/httpd-vhosts.conf
核心虚拟主机配置
编辑conf/extra/httpd-vhosts.conf,添加如下虚拟主机规则,注意不要漏写路径末尾的斜杠,否则会出现路径映射错位:
<VirtualHost *:80> ServerName app.example.com # 关闭正向代理能力,避免服务被滥用为公网代理 ProxyRequests Off <Proxy *> Require all granted </Proxy> # 路径映射:将根路径请求转发到Tomcat下的/app应用 ProxyPass / http://127.0.0.1:8080/app/ ProxyPassReverse / http://127.0.0.1:8080/app/ # 修正Cookie域名与路径,避免因Cookie校验失败触发应用跳转 ProxyPassReverseCookieDomain 127.0.0.1 app.example.com ProxyPassReverseCookiePath /app / # 关键规则:改写Tomcat返回的重定向头,替换掉真实端口、路径,避免浏览器拿到真实地址触发跳转 Header edit Location ^http://www.example.com:8080/app/(.*)$ http://app.example.com/$1 Header edit Location ^http://127.0.0.1:8080/app/(.*)$ http://app.example.com/$1 # 传递真实客户端信息到后端Tomcat,方便应用记录访问来源 RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s RequestHeader set X-Forwarded-Host app.example.com RequestHeader set X-Forwarded-Proto http </VirtualHost>
Tomcat侧可选加固(彻底杜绝自跳转问题)
如果配置完Apache后仍偶发跳转,可以修改Tomcat配置文件conf/server.xml,找到8080端口对应的Connector节点,添加代理相关参数,让Tomcat自身生成的URL直接使用对外域名,不再携带8080端口和/app路径:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" proxyName="app.example.com" proxyPort="8" />
如果不想修改Tomcat配置,仅靠上述Apache规则也能实现需求,该步骤为可选优化项。
生效验证
- 执行配置语法检查:
httpd -t,返回Syntax OK即配置无语法错误 - 重启Apache服务:
systemctl restart httpd(CentOS/RHEL系列)或systemctl restart apache2(Debian/Ubuntu系列) - 清空浏览器缓存后访问
http://app.example.com,地址栏会始终保留该域名,不会暴露8080端口与/app路径。
常见配置踩坑点
- ProxyPass规则末尾漏写斜杠,会导致路径映射错位,静态资源、接口请求返回404
- 客户端未配置app.example.com的hosts映射,请求根本没有到达服务器的Apache服务
- 未配置Header重写规则,Tomcat返回的301/302重定向头直接透传给浏览器,触发地址栏跳转
- 未配置Cookie路径修正,应用登录态校验失败后会自动跳转到带/app的真实路径
内容的提问来源于stack exchange,提问作者zoostar
相关产品推荐
相关产品推荐

