Apache反向代理重定向循环的根源是ProxyPassReverse缺失或配置不匹配,导致后端返回的内网Location头未被修正;必须严格配对ProxyPass与ProxyPassReverse(路径、协议、端口完全一致),并透传X-Forwarded-Proto和Host头,辅以curl抓包验证和日志追踪定位真实跳转链。
apache mod_proxy 本身不主动制造重定向,但若后端服务返回 location 头指向内网地址,而 proxypassreverse 配置不当或缺失,就容易触发浏览器反复跳转——表现为 err_too_many_redirects 或 apache 日志中 ah00124 错误。解决核心是切断无效跳转链,不是堆叠规则。
检查并修正 ProxyPassReverse 配置
这是最常见原因:后端返回 Location: http://127.0.0.1:8080/login,但 Apache 没有对应 ProxyPassReverse,或路径/协议/端口不匹配,导致重定向未被改写,浏览器直连失败后可能触发后端二次跳转。
- 每条
ProxyPass必须配一条严格对应的ProxyPassReverse,路径前缀(带或不带尾部/)和后端 URL 完全一致 - 用
curl -v https://yourdomain.com/some-path实际抓取响应头,看 Location 值长什么样,再照着写 ProxyPassReverse,别靠猜测 - 如果后端返回 HTTPS 地址(如
https://10.0.1.5:8443/callback),ProxyPassReverse 第二个参数必须写全https://10.0.1.5:8443/
确保 Host 和协议头正确传递
后端常根据 Host 或 X-Forwarded-Proto 生成重定向 URL。若这些头缺失或错误,后端可能拼出 http://backend.local/login 这类地址,ProxyPassReverse 无法匹配,形成循环。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 在
<VirtualHost>中启用ProxyPreserveHost On,让原始 Host 头透传 - 显式设置协议头:
RequestHeader set X-Forwarded-Proto "https" env=HTTPS(HTTPS 场景)或RequestHeader set X-Forwarded-Proto "http" - 后端应用需信任这些头(如 Spring Boot 设
server.forward-headers-strategy=framework)
排查硬编码跳转与 DNS 冲突
有些应用在代码里直接写死重定向地址(如 response.sendRedirect("https://myapp.com/home")),ProxyPassReverse 对这种绝对 URL 无能为力;还有些情况是对外域名和后端服务用了同一个域名,导致 Apache 把重定向请求又代理回自己。
- 优先改造后端:改用相对路径跳转(
/home)或基于X-Forwarded-Host动态构造 URL - 若无法改代码,可用
Header edit做正则替换(需启用mod_headers):Header edit Location "https://myapp\.com" "https://public.example.com" - 后端务必使用独立内网标识(如
api.internal或 IP+端口),DNS 上确保对外域名只解析到 Apache,不指向后端服务器
用日志定位真实跳转路径
别凭感觉调配置。开启重写追踪,看清请求到底在哪一步卡住:
- 临时加配置:
LogLevel warn rewrite:trace3,重启 Apache - 复现问题时查看
error_log,搜索对应请求 ID,关注REWRITE URI如何变化 - 重点识别是否出现
/login → /login自循环,或/old → /new → /old来回跳 - 配合
curl -IL https://yoursite.com/path看实际跳转链,确认是几跳、每跳 Location 是什么

















