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

您的反向代理设置似乎已损坏-Jenkins IIS,jenkins,iis,reverse-proxy,Jenkins,Iis,Reverse Proxy,我似乎无法正确设置反向代理为我的詹金斯与IIS 一切正常,但我不能让这个信息消失!运行“administrativeMonitor/hudson.diagnosis.ReverseProxy设置监视器/TestForReverseProxy设置”不会返回200。。但实际上是404 我还使用了Blue Ocean插件,我注意到当通过反向代理访问Jenkins时运行管道时,我看不到实时更新!!我深入研究了这个问题,发现它通常来自一个糟糕的Revery代理设置。如果我通过localhost访问jenk

我似乎无法正确设置反向代理为我的詹金斯与IIS

一切正常,但我不能让这个信息消失!运行“administrativeMonitor/hudson.diagnosis.ReverseProxy设置监视器/TestForReverseProxy设置”不会返回200。。但实际上是404

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

我得到的

  • Windows Server 2019数据中心
  • IIS 10
  • 我有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.example.com是指向我的服务器的公共IP的实际子域/域

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

    编辑:

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

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

    • 我正在AWS EC2上运行Windows Server 2019数据中心
    • 我的EC2实例位于一个应用程序负载平衡器下,它自动将所有
      http
      流量重定向到
      https
      ,但仅使用
      http
      将请求转发到服务器。也就是说,用户始终使用
      https
      连接到负载平衡器,但负载平衡器仅使用
      http
      连接到服务器
    • 在那台服务器上,我在本地运行Jenkins,地址是
      localhost:8080
    • 我想将代理
      jenkins.mydomain.com
      转换为
      localhost:8080
      ,而无需在IIS级别配置SSL
    • 我已经阅读了Jenkins网站上的所有教程、其他类似“IIS Jenkins反向代理”教程的网站以及所有相关的StackOverflow文章。没有人解决了我的问题,大多数人希望您在IIS级别配置SSL证书
    • 此外,我还收到了同样的神秘错误,URL加倍,如
      jenkins.mydomain.com/”http://jenkins.mydomain.com:80“
    以下是解决问题的确切配置:

  • 显然,您需要正确配置AWS上的所有内容。如果您没有使用AWS,请确保您的配置具有可比性
    • 具有安全策略的EC2实例,允许端口80上的传入连接
    • 应用程序负载平衡器将
      http
      请求重定向到
      https
      ,并将
      https
      请求转发到端口80上的EC2实例
    • 使用SSL证书配置的应用程序负载平衡器
    • DNS配置为将
      jenkins.mydomain.com
      定向到应用程序负载平衡器
  • 与其他教程一样,必须为IIS安装ARR
  • 与其他教程不同,不要将
    127.0.0.1 jenkins.mydomain.com
    添加到主机文件中。如果已添加,请将其删除
  • 在IIS中,应用程序请求路由缓存>服务器代理设置
    • 启用代理:已选中
    • 在响应头中反向重写主机:已选中
    • 这与其他教程不同,最终是使我的设置正常工作的关键所在
  • 在IIS中,默认网站>请求筛选>编辑功能设置
    • 允许双重转义:选中
  • 在IIS中,默认网站>URL重写>添加规则>空白规则
    • 姓名:
      Jenkins重写
    • 模式:
      (.*)
    • 条件:
      {HTTP\u HOST}
      匹配
      *jenkins.mydomain.com.*
    • 服务器变量:无
    • 操作:重写
      http://localhost:8080{UNENCODED_URL}
  • 请注意,此处不需要包含
    http
    https
    重定向规则。如果你有一个,我不认为它会伤害任何东西,但不要被认为这是重要的,因为其他教程建议
  • 在IIS中,配置编辑器>system.webServer/rewrite/rules
    • useOriginalurEncoding
      False
  • 在Jenkins中(您可能需要首先通过
    LoaclHost:8080
    访问),管理Jenkins>配置系统
    • 詹金斯网址:
      https://jenkins.mydomain.com/
  • 在Jenkins中,管理Jenkins>配置全局安全性
    • 启用代理兼容性:已选中
    就这样!可能有些步骤(特别是第9步和第10步)是不必要的,但在我达到现在的状态的过程中,这些值已经设置好了,一旦开始工作,我就不想改变任何东西

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


    编辑:顺便说一句,一旦一切正常,就可以随意点击Jenkins上的“禁用”按钮,警告您的反向代理配置被弄乱了。我认为这种情况以及由此产生的使其工作的配置非常不标准,以至于Jenkins没有意识到它实际上正在工作。

    您是否为IIS安装了ARR?因为如果你有一个坏的反向代理,你应该收到50x错误而不是404错误。嗨@JokiesDing,我确实安装了应用程序请求路由。
    127.0.0.1 jenkins.example.com