Jenkins不会重定向到HTTPS

Sla*_*lav 10 ssl tomcat hudson jenkins

问题

我正在使用Jenkins HTTPS/SSL(下面的设置细节).我可以https://jenkins.mydomain.com:8088毫无问题地导航到.所有链接都https://在他们面前是正确的.我可以正确浏览几乎所有Jenkins页面.

除了 Jenkins尝试重定向(例如登录后,点击Build后等).每当Jenkins尝试重定向到任何页面时,它都会将我发送到http://页面(不是httpS://)

我试过的

  • 我试过Jenkins URL在全局配置中设置设置 .它适用于所有内容,但它始终重定向到http://,尽管URL说httpS:// 在此输入图像描述
  • 我已经尝试过以下有关使用端口配置进行修改的说明jenkins.xml,但是由于我的设置没有使用Jenkins Windows服务安装,我根本没有,jenkins.xml是否有不同的地方我可以为Jenkins指定参数?
  • 我已经尝试了解"使用HTTPS的mod_proxy"意味着什么,但我没有任何虚拟主机配置.此外,我的Tomcat安装不是处理SSL的安装.问题似乎只出现在Jenkins的重定向机制中,它忽略Jenkins URL了全局配置中的协议部分.

詹金斯的设置

  • Apache Tomcat作为Windows服务运行
    1. Jenkins.war重命名ROOT.war为放置在Tomcat的webapps文件夹中
    2. 执行 bin\tomcat6.exe //RS//Instance_Name
    3. 通过Tomcat的Windows"Monitor Service"工具进行配置 在此输入图像描述
  • 在此计算机上以这种方式配置了多个实例,区别在于各自的Tomcat文件夹和不同的Tomcat端口 conf\server.xml
  • 我继承了这个设置.不知道为什么他们没有使用Windows服务的本机安装包.在这台计算机上有多个Jenkins实例(通过多个Tomcat服务实例).尝试更改所有这些实例的安装类型将导致无法接受的停机时间.
  • Jenkins的端口8088不能443用于SSL,因为有多个实例正在运行,并且它们不能全部具有443实例区分的唯一方式是端口.

SSL设置

  • 我们有一个*.mydomain.com托管在负载均衡器硬件上的全局SSL证书().(我无法访问实际文件)
  • 托管Jenkins的实际Windows服务器上没有SSL.
  • DNS jenkins.mydomain.com解析为负载均衡器上的虚拟IP,然后转发到托管Jenkins的实际Windows服务器的流量.
  • 什么不对这个设置,它工作正常,其他所有网站.此SSL设置也适用于我们的Jenkins实例.

小智 1

如果您正在执行 HTTP 代理方案,我建议查看 server.xml 并找到连接器并添加 secure="true"。也可能涉及重定向端口。

<Connector secure="true" port="8088" protocol="HTTP/1.1" URIEncoding="UTF-8"
           connectionTimeout="20000"
            />
Run Code Online (Sandbox Code Playgroud)

作为参考,我们在 2 个 Apache 代理(一个外部代理和一个内部代理)后面运行 Jenkins:

我们的外部虚拟主机(jenkins.host.com)的相关部分:

    RequestHeader unset Authorization
    RequestHeader set Authorization "Basic (encrypted password)"
    ProxyPass / ajp://dev.internal:9101/
    ProxyPassReverse / ajp://dev.internal:9101/
Run Code Online (Sandbox Code Playgroud)

tomcat的server.xml的相关部分:

<Connector port="9001" protocol="HTTP/1.1" URIEncoding="UTF-8"
           connectionTimeout="20000"
            />

<Connector port="9101" protocol="AJP/1.3" URIEncoding="UTF-8"/>

<Host name="dev.internal" appBase="webapps"
        unpackWARs="true" autoDeploy="true">
       <Alias>jenkins.host.com</Alias>

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="dev.internal_access_log." suffix=".txt" rotatable="false"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>
Run Code Online (Sandbox Code Playgroud)

  • 启用安全连接器没有帮助。就像我试图解释的那样,问题不在于配置网络服务器(Tomcat),因为托管 Jenkins 的服务器甚至没有 SSL 证书,并且它本身无法在没有证书的情况下通过 SSL 工作。这是詹金斯配置上的问题...... (2认同)