我已将 HAProxy 配置为终止 Jenkins CI 服务器的 SSL 连接,并通过普通的 HTTP 代理到 Jenkins CI 服务器后端。我可以成功执行 [迄今为止] Jenkins CI 服务器 Web 界面中需要的所有操作,包括管理实例。
然而,我明白了Jenkins“反向代理设置已损坏”警告。这是由于 Jenkins 1.572 版以来的代理配置检查更加严格所致,它使用以下形式的 URL:
https://host-name/jenkins/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/a%2Fb/
测试反向代理配置。出现警告的典型原因是%2F
反向代理将 解码为正斜杠,从而导致 404。
似乎有针对 Apache 和 nginx 反向代理配置的完善配置解决方案,可以消除此警告。我找不到类似于 Apache 的“AllowEncodedSlashes On”选项或 nginx 的“proxy_pass”配置的东西,甚至找不到在 HAProxy 后面设置 Jenkins 的示例(我使用它而不是 Apache 或 nginx,因为我们已经为其他应用程序安装了 HAProxy)。
- 操作系统:CentOS 6.6
- HAProxy 版本:1.5.2-2
- Jenkins版本:1.610
答案1
事实证明,这不是 URL 编码/解码的问题。这只是我的操作失误 - 在任何代理上终止 SSL 时必须确保X-代理协议标头设置为https因此,Jenkins 以这种方式生成的所有 URL 都使用以下方案:https。我错过了故障排除页面上的文档中的一行。简单添加:
http-request set-header X-Forwarded-Proto https
对后端定义删除了警告。