如何配置 HAProxy 以将未编码的 URL 传递到 Jenkins 后端?

如何配置 HAProxy 以将未编码的 URL 传递到 Jenkins 后端?

我已将 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

对后端定义删除了警告。

相关内容