詹金斯为什么抱怨我的反向代理设置被破坏了?

Kev*_*vin 23 apache configuration tomcat reverse-proxy jenkins

我不知道为什么在Jenkins更新到版本1.591(Ubuntu Server 12.04)之后,最初正确设置的反向代理现在变得破碎了.我当前的设置与Jenkins wiki中的设置完全相同:

ProxyPass /jenkins http://localhost:8081/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8081/jenkins
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8081/jenkins*>
Order deny,allow
Allow from all
</Proxy>
Run Code Online (Sandbox Code Playgroud)

--prefix=/jenkins已被添加到/etc/default/jenkins文件中

这是詹金斯的错误吗?

Jos*_*ger 37

Jenkins作为Windows服务包遇到了这个问题.

根据他们的维基:

确保系统配置中配置的Jenkins URL与您用于访问Jenkins的URL匹配.

要达到系统配置:

  1. 转到Jenkins页面
  2. 单击管理Jenkins
  3. 单击配置系统
  4. 滚动到Jenkins Location并找到Jenkins URL.

确保端口值与计算机上Jenkins文件夹中jenkins.xml文件<arguments>部分中设置的端口值匹配.

  • 正是这样:为了扩展答案:服务器主机名已更改,我没有更改"Jenkins位置"(a)当我*FIRST*设置jenkins框时,我使用了[http://jenkins-test1.example .com](http://jenkins-test1.example.com),这就是我在管理Jenkins - >配置系统 - > Jenkins位置,(b)稍后机器成为生产机器,主机名改为:[http://jenkins-prod1.example.com](http://jenkins-prod1.example.com) - 现在Jenkins抱怨,因此(C)解决方案:更新"Jenkins位置" (3认同)
  • 我的机器上没有 ** 没有 jenkins.xml**。我有 Ubuntu。 (3认同)
  • 谢谢Josh,我是通过localhost而不是通过正常的名字来打我的.他们应该真正为localhost添加一个例外消息... (2认同)

Kev*_*vin 5

事实证明,即使烦人的消息持续出现,一切正常.我认为这是该版本的一个小错误.

  • 这不是一个错误。正如 Jenkins Wiki 中所指出的,“反向代理测试在 1.552 版中得到了改进,因此具有以前工作代理设置的用户可能会开始收到代理警告。” 有关更多详细信息,请参阅 [此答案](/sf/answers/3643192241/)。 (2认同)

Rob*_*low 5

对我来说,修复是添加:

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Run Code Online (Sandbox Code Playgroud)

这让它停止抱怨.

  • 是的,明白了。对于 NGINX `proxy_set_header X-Forwarded-Proto https;` `proxy_set_header X-Forwarded-Port 443;` (3认同)
  • 你在哪里添加的,罗宾? (3认同)

val*_*tis 5

Jenkins 具有主动监控功能,以确保正确配置正向和反向代理。在 1.552 版中,这些测试得到了改进,现在可以检测到以前未标记为损坏的错误代理设置。从版本 1.572 开始,即使不依赖反向代理的 Jenkins 实例也会显示此警告。

修复损坏的反向代理配置高度依赖于您的 Web 服务器和 Web 应用程序容器,这就是为什么对您的问题发布了这么多其他答案的原因。关于此主题的 Jenkins Wiki 文章“ Jenkins 说我的反向代理设置已损坏”,在评论中描述了几种解决此问题的方法。

从上面的文章:

为了使反向代理正常工作,它需要重写请求和响应。

但是正确的反向代理还涉及以下两个选项之一:

  1. 重写响应;或者
  2. 在转发的请求上设置 X-Forwarded-Host(也可能是 X-Forwarded-Port)标头。

就我而言,这实际上是第一个选项的问题,我的响应重写没有正确编码斜杠。如果您将 Apache HTTPD 与 Tomcat 一起使用,则需要向两个服务器添加对编码斜杠的支持,而不仅仅是 Apache HTTPD。

这些是在我的特定情况下解决此问题的说明:Amazon Linux EC2 实例上的 Jenkins 2.1.41,带有 Apache 2.4、Tomcat 8.5 和 Tomcat 连接器。

/etc/httpd/conf.d/ssl.conf添加以下行您的詹金斯HostVirtualHost

AllowEncodedSlashes NoDecode
Run Code Online (Sandbox Code Playgroud)

将以下行添加到/usr/share/tomcat8/conf/catalina.properties

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
Run Code Online (Sandbox Code Playgroud)

重启两个服务:

service httpd restart
service tomcat8 restart
Run Code Online (Sandbox Code Playgroud)

刷新您的管理 Jenkins 页面。警告信息将消失。


在 Apache HTTPD 中实现第二个选项的示例:

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Run Code Online (Sandbox Code Playgroud)

对于 NGINX:

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
Run Code Online (Sandbox Code Playgroud)