【问题标题】:It appears that your reverse proxy set up is broken - Jenkins IIS您的反向代理设置似乎已损坏 - Jenkins IIS
【发布时间】:2020-01-14 16:07:42
【问题描述】:

我似乎无法使用 IIS 为我的 Jenkins 正确设置反向代理。

一切正常,但我无法让该消息消失!运行“administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup”不会返回 200.. 但实际上是 404。

我也使用插件 Blue Ocean,我注意到当通过我的反向代理访问 Jenkins 时运行管道时,我看不到实时更新!我对此进行了深入研究,发现它通常来自错误的 Revery Proxy 设置。如果我通过 localhost 访问 jenkins,我可以看到 Blue Ocean Pipeline 实时更新,所以一定是设置错误!

我得到了什么

  1. Windows Server 2019 数据中心
  2. IIS 10

我有 HTTPS 设置,所以我的目标是:转到 jenkins.example.com,它将重定向到 https://jenkins.example.com,这反过来又是一个反向代理加载 jenkins。

我的 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules useOriginalURLEncoding="false">
                <!-- Enforces redirection of all HTTP traffic to HTTPS -->
                <rule name="Enforce HTTPS" stopProcessing="true">
                    <match url="(.*)" />
                        <conditions>
                            <add input="{HTTPS}" pattern="off" />
                        </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
                </rule>
                <rule name="ReverseProxyToLocalJenkinsRule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="on" />
                    </conditions>
                    <action type="Rewrite" url="http://jenkins.example.com:7070/{R:1}" />
                    <serverVariables>
                        <set name="X-Forwarded-Proto" value="https" />
                        <set name="X-Forwarded-Port" value="443" />
                        <set name="X-Forwarded-Host" value="{HTTP_HOST}" />
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>
        <security>
            <requestFiltering allowDoubleEscaping="true" />
        </security>
    </system.webServer>
    <system.web>
        <httpRuntime maxUrlLength="4096" />
    </system.web>
</configuration>

这似乎是我能获得的最好的反向代理,遵循 jenkins 教程通常会导致我出现登录问题(URL 加倍,即:example.com/https://example.com

P.s,这是最新的 Windows 服务器映像,是一个干净的基础版本。

我浏览了许多教程,但没有任何解决此问题的方法,非常感谢任何建议。

我还想指出,我有一台安装了 Jenkins 和 IIS 的服务器,可以在本地服务器上的 localhost:7070 访问 Jenkins。我还在服务器上编辑了我的主机文件:

127.0.0.1 jenkins.example.com

jenkins.example.com 是一个实际的子域/域,指向我的服务器的公共 IP。

所以当我在本地服务器上 ping:jenkins.domain.com 时,它返回 127.0.0.1。如果我在该服务器之外 ping,即在我的 PC 上,我会获得公共 IP。

编辑:

我已经安装了应用程序请求路由,下面是我的配置:

【问题讨论】:

  • 您是否为您的 IIS 安装了 ARR?因为如果你的反向代理不好,你应该收到 50x 错误而不是 404 错误。
  • 嗨@JokiesDing,我确实安装了应用程序请求路由。检查我对问题的编辑。谢谢

标签: jenkins iis reverse-proxy


【解决方案1】:

我刚刚花了 6 个小时的时间来调试这个,我希望如果一些可怜的人像我一样找到这个页面,我的回答会有所帮助。与原始问题几乎相同的情况,但为了彻底,我将详细说明我的确切情况,以及我的确切解决方案:

  • 我在 AWS EC2 上运行 Windows Server 2019 数据中心
  • 我的 EC2 实例位于 Application Load Balancer 下,它自动将所有 http 流量重定向到 https,但仅使用 http 将请求转发到服务器。也就是说,用户始终使用https连接到负载均衡器,但负载均衡器仅使用http连接到服务器
  • 在那台服务器上,我在本地运行 Jenkins,地址为 localhost:8080
  • 我想将 jenkins.mydomain.com 反向代理为 localhost:8080,而不在 IIS 级别配置 SSL
  • 我已经阅读了 Jenkins 网站上的所有教程、其他具有类似“IIS Jenkins Reverse Proxy”教程的网站以及所有相关的 StackOverflow 文章。 NONE 解决了我的问题,最希望您在 IIS 级别配置 SSL 证书。
  • 另外,我遇​​到了与jenkins.mydomain.com/"http://jenkins.mydomain.com:80" 一样的 URL 加倍的神秘错误

这是我解决问题的确切配置:

  1. 显然,您需要正确配置 AWS 上的所有内容。如果您不使用 AWS,请确保您的配置具有可比性。
  • 具有安全策略的 EC2 实例允许端口 80 上的传入连接
  • Application Load Balancer 将 http 请求重定向到 https,并将 https 请求转发到端口 80 上的 EC2 实例
  • 使用 SSL 证书配置的应用程序负载均衡器
  • DNS 配置为将 jenkins.mydomain.com 定向到您的 Application Load Balancer
  1. 与其他教程一样,您必须为 IIS 安装 ARR
  2. 与其他教程不同,请勿将127.0.0.1 jenkins.mydomain.com 添加到您的主机文件中。如果您已添加它,请将其删除
  3. 在 IIS 中,应用程序请求路由缓存 > 服务器代理设置
  • 启用代理:选中
  • 在响应头中反向重写主机:选中
  • 这与其他教程不同,最终是使我的设置正常工作的关键
  1. 在 IIS 中,默认网站 > 请求过滤 > 编辑功能设置
  • 允许双重转义:选中
  1. 在 IIS 中,默认网站 > URL 重写 > 添加规则 > 空白规则
  • 姓名:Jenkins Rewrite
  • 模式:(.*)
  • 条件:{HTTP_HOST} 匹配 .*jenkins.mydomain.com.*
  • 服务器变量:无
  • 操作:重写http://localhost:8080{UNENCODED_URL}
  1. 请注意,此处无需包含httphttps 重定向规则。如果你有一个,我认为这不会造成任何伤害,但不要像其他教程所建议的那样认为这很重要。
  2. 在 IIS 中,配置编辑器 > system.webServer/rewrite/rules
  • useOriginalURLEncoding: False
  1. 在 Jenkins 中(您可能首先需要通过 loacalhost:8080 访问),管理 Jenkins > 配置系统
  • 詹金斯网址:https://jenkins.mydomain.com/
  1. 在 Jenkins 中,管理 Jenkins > 配置全局安全
  • 启用代理兼容性:选中

就是这样!其中一些步骤(尤其是第 9 步和第 10 步)可能是不必要的,但在达到我现在的位置的过程中,这些值已经设置好了,一旦它开始工作,我不想改变任何东西!

再次,对我来说,主要突破是启用“在响应标头中反向重写主机”。

编辑:另外,顺便说一下,一旦一切正常,请随意点击 Jenkins 上的“禁用”按钮,警告您的反向代理配置被搞砸了。我认为这种情况以及使其工作的最终配置非常不标准,以至于 Jenkins 没有意识到它实际上是在工作。

【讨论】:

  • 嘿,我又来了。只是想分享一下发生在我身上的事情:在设置我网站的其他部分的过程中,我不小心删除了我的web.config 文件。使用我在此处发布的步骤,我可以轻松地修复我的 Jenkins 设置,100% 无压力!有时,你知道,这些服务器配置的东西感觉很脆弱,就像即使你再做同样的事情,它也行不通。我在这里告诉你,对我来说,它确实第二次起作用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2016-10-17
  • 2013-05-23
  • 2020-03-18
  • 1970-01-01
  • 2016-01-05
  • 2018-02-22
相关资源
最近更新 更多