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

时间:2020-01-14 16:07:42

标签: jenkins iis reverse-proxy

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

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

我还使用了插件Blue Ocean,我注意到通过反向代理访问Jenkins时运行管道时,我看不到实时更新!我对此进行了研究,发现它通常是由于不良的Revery Proxy设置造成的。如果我通过本地主机访问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 Server映像,是一个干净的基础版本。

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

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

127.0.0.1 jenkins.example.com

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

因此,当我在本地服务器上ping:jenkins.domain.com时,它将返回127.0.0.1。如果我在该服务器(例如,在我的PC上)上执行ping操作,则会获得公共IP。

Jenkins Test Failing

编辑:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

编辑:另外,顺便说一句,一旦一切正常,请随意点击Jenkins上的“禁用”按钮,警告您的反向代理配置被搞砸了。我认为这种情况以及为使其工作而产生的配置非常不标准,以至于詹金斯不承认它确实在工作。

相关问题