Jenkins不会重定向到HTTPS

时间:2014-05-16 19:52:27

标签: tomcat ssl jenkins hudson

问题

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

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

我尝试了什么

  • 我尝试在全局配置中设置Jenkins URL设置。它适用于所有内容,但它总是重定向到http://,尽管网址为httpS:// enter image description here
  • 我已尝试关注instructions here关于使用端口配置修改jenkins.xml,但由于我的设置未使用Jenkins Windows服务安装,我根本没有jenkins.xml是否有不同之处我可以为Jenkins指定参数吗?
  • 我尝试了解“mod_proxy with HTTPS”的意思,但我没有任何虚拟主机配置。此外,我的Tomcat安装不是处理SSL的安装。问题似乎只出现在Jenkins的重定向机制中,它忽略了全局配置中的Jenkins URL协议部分。

Jenkins设置

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

SSL设置

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

2 个答案:

答案 0 :(得分:1)

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

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

供参考, 我们在两个Apache代理后面运行Jenkins,一个是外部代理,一个是内部代理:

外部vhost的相关部分(jenkins.host.com):

    RequestHeader unset Authorization
    RequestHeader set Authorization "Basic (encrypted password)"
    ProxyPass / ajp://dev.internal:9101/
    ProxyPassReverse / ajp://dev.internal:9101/

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>

答案 1 :(得分:1)

您可能需要重新启动Jenkins服务器才能使全局配置更改生效。 Jenkins CI Cookbook说(突出我的):

  

Jenkins使用Xstream(http://x-stream.github.io/)将其配置保持为可读的XML格式。工作空间中的XML文件是插件,任务和各种其他持久信息的配置文件。 config.xml是主配置文件。此处设置安全设置和全局配置,并反映通过GUI进行的更改。插件使用相同的结构,XML值对应于底层插件类中的成员值。 GUI本身是通过Jelly框架(http://commons.apache.org/jelly/)从XML创建的。

     

通过重新启动服务器,您应该确保在初始化阶段选择了任何配置更改。

此外,为了确保没有人通过HTTP访问Jenkins服务器(例如,过时的链接,在浏览器中手动键入URL等),您可以让负载均衡器将http:// URL重写为https://个网址。


编辑:此答案的早期版本错误地提示以下内容:

  

Tomcat按urlrewritefilter

中的建议使用this answerhttp://网址重写为https://网址

无法完成,因为SSL证书驻留在终止SSL连接的loadbalancer上,这意味着它会向Tomcat说HTTP,因此Tomcat永远不会看到https:// URL,因此这个建议会导致无限的重定向循环。 (保持这个,因为否则下面的评论没有意义)。