您的反向代理设置似乎已损坏 - Jenkins IIS

Wil*_*iam 0 iis reverse-proxy jenkins

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

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

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

我得到了什么

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

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

我的网络配置:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

PS,这是最新的 Windows 服务器映像,并且是一个干净的基础版本。

我浏览了很多教程,但没有解决这个问题,非常感谢任何建议。

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

127.0.0.1 jenkins.example.com
Run Code Online (Sandbox Code Playgroud)

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

因此,当我在本地服务器上 ping: jenkins.domain.com 时......它返回 127.0.0.1。如果我在该服务器之外执行 ping 操作,即。在我的电脑上,我获得了公共IP。

詹金斯测试失败

编辑:

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

man*_*er6 5

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

  • 我正在 AWS EC2 上运行 Windows Server 2019 数据中心
  • 我的 EC2 实例位于应用程序负载均衡器下,该均衡器会自动将所有http流量重定向到https,但仅使用将请求转发到服务器http。也就是说,用户始终使用 来连接到负载均衡器https,但负载均衡器仅使用http
  • 在该服务器上,我在本地运行 Jenkinslocalhost:8080
  • 我想要反向代理jenkins.mydomain.com而不localhost:8080在 IIS 级别配置 SSL
  • 我已通读 Jenkins 网站上提供的所有教程、其他具有类似“IIS Jenkins 反向代理”教程的网站以及所有相关的 StackOverflow 文章。没有人解决我的问题,并且大多数人希望您在 IIS 级别配置 SSL 证书。
  • 另外,我也遇到了同样的神秘错误,网址加倍了,就像jenkins.mydomain.com/"http://jenkins.mydomain.com:80"

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

  1. 显然,您需要正确配置 AWS 上的所有内容。如果您不使用 AWS,请确保您的配置具有可比性。
  • 具有允许端口 80 上传入连接的安全策略的 EC2 实例
  • Application Load Balancer 将http请求重定向到https,并将https请求转发到端口 80 上的 EC2 实例
  • 配置了 SSL 证书的应用程序负载均衡器
  • 配置为定向jenkins.mydomain.com到您的 Application Load Balancer 的DNS
  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. 请注意,此处无需包含http重定向https规则。如果你有一个,我认为它不会造成任何伤害,但不要像其他教程所建议的那样认为这很重要。
  2. 在 IIS 中,配置编辑器 > system.webServer/rewrite/rules
  • useOriginalURLEncoding:False
  1. loacalhost:8080在 Jenkins 中(您可能首先需要通过它访问),管理 Jenkins > 配置系统
  • 詹金斯网址:https://jenkins.mydomain.com/
  1. 在 Jenkins 中,管理 Jenkins > 配置全局安全性
  • 启用代理兼容性:选中

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

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

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

  • 嘿,又是我。只是想分享发生在我身上的事情:在设置网站其他部分的过程中,我不小心删除了“web.config”文件。使用此处发布的步骤,我可以轻松修复我的 Jenkins 设置,100% 无压力!有时,你知道,这些服务器配置的东西感觉很脆弱,即使你再次做同样的事情,它也不会起作用。我在这里告诉你,对我来说,它实际上第二次起作用了! (2认同)