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

时间:2014-11-27 01:50:12

标签: apache tomcat jenkins configuration reverse-proxy

我不知道为什么在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>

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

这是詹金斯的错误吗?

8 个答案:

答案 0 :(得分:30)

我将Jenkins作为Windows服务包遇到了这个问题。

根据他们的wiki

  

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

进入系统配置:

  1. 转到Jenkins页面
  2. 点击管理Jenkins
  3. 单击“配置系统”
  4. 滚动至 Jenkins位置,找到Jenkins网址。
  5. 确保端口值与计算机上Jenkins文件夹中 jenkins.xml 文件的<arguments>部分中设置的端口值匹配。

答案 1 :(得分:5)

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

答案 2 :(得分:5)

对我来说,修复是添加:

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"

这使它停止抱怨。

答案 3 :(得分:2)

此处a link明确指出在1.552之后某些事情发生了变化,因此添加了这些新行;

 nocanon and AllowEncodedSlashes

解决了我的问题和警告。

答案 4 :(得分:2)

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

解决损坏的反向代理配置在很大程度上取决于您的Web服务器和Web应用程序容器,这就是为什么在您的问题中还有这么多其他答案的原因。詹金斯Wiki上有关该主题的文章“ Jenkins says my reverse proxy setup is broken”描述了几种在注释中解决此问题的方法。

来自以上文章:

  

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

     

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

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

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

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

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

AllowEncodedSlashes NoDecode

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

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

重新启动两个服务:

service httpd restart
service tomcat8 restart

刷新您的Manage Jenkins页面。警告消息将消失。


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

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"

,对于NGINX:

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;

答案 5 :(得分:0)

对于nginx,这也对我有所帮助:

proxy_redirect      http://localhost:8080 https://your.ssl.domain.name

不要包含上述网址的任何尾部斜杠,而也不包含proxy_pass网址。

答案 6 :(得分:0)

如果您设置Referrer-Policy标头以删除“ referer”标头,也可以看看。该文件供/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/处的自检XHR脚本使用。

答案 7 :(得分:-1)

它正在尝试使用实际的网址验证设置中指定的网址:

  1. 去管理詹金斯
  2. 配置系统
  3. 詹金斯网址
  4. 将网址更改为您的公共IP地址
  5. 保存