【问题标题】:Why does Jenkins complain that my reverse proxy setup is broken?为什么詹金斯抱怨我的反向代理设置被破坏了?
【发布时间】:2015-01-25 12:44:23
【问题描述】:

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

这是 Jenkins 的错误吗?

【问题讨论】:

    标签: apache tomcat jenkins configuration reverse-proxy


    【解决方案1】:

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

    据他们wiki

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

    进入系统配置:

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

    确保端口值与您计算机上 Jenkins 文件夹中 jenkins.xml 文件的 &lt;arguments&gt; 部分中设置的端口值匹配。

    【讨论】:

    • 谢谢乔希,我是通过本地主机而不是普通名称访问我的。他们真的应该为这条消息添加一个例外到 localhost...
    • 正是这个:扩展答案:服务器主机名已更改,当我 FIRST 设置詹金斯框时,我没有更改“詹金斯位置”(a) ,我用http://jenkins-test1.example.com,所以这就是我放在Manage Jenkins -> Configure System -> Jenkins Location,(b)后来机器变成了生产机器,主机名改为:http://jenkins-prod1.example.com - 现在Jenkins抱怨,因此(C)解决方案:更新“Jenkins Location”
    • 我的“jenkins.xml”文件中的参数字符串如下所示。 -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war" 这是我在 Jenkins URL 字段下给出的 URL:localhost:8080/jenkins 我无法理解如何让两个字符串都暗示同一个 Jenkins 地址。
    • 我的机器上没有 没有 jenkins.xml。我有 Ubuntu。
    • 感谢您的帮助。您肯定减轻了阅读整个 wiki 的工作量。就我而言,我已将默认端口更改为 8100。
    【解决方案2】:

    对我来说,解决方法是添加:

    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;
    • 这个答案中提供的配置为我解决了它(stackoverflow.com/questions/34940805/…
    • 你在哪里添加的,罗宾?
    【解决方案3】:

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

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

    来自上述文章:

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

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

    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 中为您的 Jenkins 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
    

    刷新您的管理 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;
    

    【讨论】:

    • 感谢您提供如此全面的分析和解决方案。围绕这个问题有很多“解决方案”,但它们都缺少 tomcat 部分——事实证明这是必不可少的。
    【解决方案4】:

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

    【讨论】:

    • 这不是错误。正如 Jenkins Wiki 中所述,“反向代理测试在 1.552 版中得到了改进,因此具有以前工作代理设置的用户可能会开始收到代理警告。”有关详细信息,请参阅this answer
    【解决方案5】:

    对于 nginx,这也帮助了我:

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

    不要在上述网址中包含任何尾随斜杠,也不要proxy_pass 网址中。

    【讨论】:

      【解决方案6】:

      这里的a link 明确指出在 1.552 之后发生了一些变化,因此添加了这些新行;

       nocanon and AllowEncodedSlashes
      

      解决了我的问题,警告消失了。

      【讨论】:

        【解决方案7】:

        它正在尝试将设置中指定的 url 与实际的 url 进行验证:

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

        【讨论】:

          【解决方案8】:

          如果您设置了一个Referrer-Policy 标头,它会删除“referer”标头,请查看一下。 /administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/ 的自测 XHR 脚本使用了那个。

          【讨论】:

            猜你喜欢
            • 2017-07-05
            • 2018-10-08
            • 1970-01-01
            • 2016-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-03
            • 2015-05-03
            相关资源
            最近更新 更多