Apache 2.4反向代理Tomcat 9:登录成功后出现408请求超时
解决Apache反向代理Tomcat表单认证408超时问题
你的问题核心出在反向代理的路径映射和Cookie配置错误上,尤其是表单认证关键请求j_security_check没有被正确转发到Tomcat对应路径,加上Cookie路径配置反向,导致认证流程中断触发408超时。下面是具体的解决方案:
问题根源分析
直接访问Tomcat的http://10.10.50.20/apachetest时,表单提交目标是/apachetest/j_security_check,但通过Apache SSL虚拟主机访问时,表单提交的是/j_security_check。你的现有ProxyPass规则虽然把根路径代理到了Tomcat的/apachetest/,但Cookie路径配置搞反了,且可能存在请求转发优先级问题,导致j_security_check请求未被正确转发,最终引发超时。
修改Apache虚拟主机配置
将你的SSL虚拟主机配置调整为以下内容:
# 先确保启用必要模块(未启用则执行a2enmod proxy proxy_http ssl headers) ProxyRequests Off ProxyPreserveHost On # 根路径代理到Tomcat的/apachetest/ ProxyPass / http://localhost:8087/apachetest/ ProxyPassReverse / http://localhost:8087/apachetest/ # 明确指定j_security_check的代理规则,确保认证请求被正确转发 ProxyPass /j_security_check http://localhost:8087/apachetest/j_security_check ProxyPassReverse /j_security_check http://localhost:8087/apachetest/j_security_check # 修正Cookie路径:把Tomcat返回的Cookie路径/apachetest转换为Apache根路径/ ProxyPassReverseCookiePath /apachetest / # 同步Cookie域名,确保浏览器正确发送Cookie ProxyPassReverseCookieDomain localhost apachetest.localdomain # 告诉Tomcat请求通过HTTPS传输,避免协议不匹配 RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443"
关键调整说明
- 修正Cookie路径:原来的
ProxyPassReverseCookiePath / /apachetest完全反向,正确逻辑是将Tomcat端的/apachetest路径转换为Apache虚拟主机的根路径/,这样浏览器才会把JSESSIONID Cookie发送到https://apachetest.localdomain/下。 - 单独代理j_security_check:虽然根路径代理理论上覆盖该请求,但单独指定可避免Apache其他模块(如rewrite)的干扰,确保认证POST请求100%转发到Tomcat对应路径。
- 设置X-Forwarded头部:让Tomcat知晓当前请求通过HTTPS协议和443端口接入,避免认证成功后出现重定向错误或会话不一致问题。
验证步骤
- 启用必要模块并重启Apache:
sudo a2enmod proxy proxy_http ssl headers sudo systemctl restart apache2 - 重新访问
https://apachetest.localdomain/,提交登录凭证后,通过Chrome开发者工具检查j_security_check请求:- 确认请求已转发到Tomcat的
/apachetest/j_security_check - 检查响应状态码是否为200或302(重定向到index.html)
- 确认请求已转发到Tomcat的
内容的提问来源于stack exchange,提问作者sta4711
相关产品推荐
相关产品推荐

