0

背景

我们曾经通过主机名和端口格式访问 Jenkins,从来没有遇到过问题。例如: http: //Jenkinsci.company.com :8080 。

我们有一个内部要求,通过公司 Netscaler ( https://apps.company.com/ ) 启用 Jenkins 访问。

因此,创建了新的 Netscaler 上下文并且新的 url:https ://apps.company.com/jenkins现在指向 -> http://Jenkinsci.company.com:8080。我还添加JENKINS_ARGS="--prefix=/jenkins"了 etc/sysconfig/jenkins。

问题

最初我们无法登录。一旦我们点击登录,我们就会被重定向到 http 页面。即 https://apps.company.com/jenkins -> http://apps.company.com/jenkins

. 因此,由于登录不起作用,因此在 Netscaler 级别设置了 http 到 https 重定向。然后登录工作。

现在我们观察到我们无法在 Jenkins 中添加凭据。

在此处输入图像描述

现在添加凭据后,下拉菜单不会显示新添加的凭据。

在此处输入图像描述

我在浏览器中调试,可以看到以下错误消息。

Mixed Content: The page at 'https://prod.company.com/jenkins/job/test1/job/test/configure' was loaded over HTTPS, but requested an insecure form action 'http://prod.company.com/jenkins/descriptor/com.cloudbees.plugins.credentials.CredentialsSelectHelper/resolver/com.cloudbees.plugins.credentials.CredentialsSelectHelper$ItemContextResolver/provider/com.cloudbees.hudson.plugins.folder.properties.FolderCredentialsProvider/context/test1/addCredentials'. This request has been blocked; the content must be served over HTTPS.

我还比较了通过 Netscaler 和直接通过主机添加凭据的网络消息,它们看起来相同,但在成功场景中执行了更多步骤。

成功

Request URL: http://Jenkinsci.company.com:8080/jenkins/descriptorByName/com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl/checkId?value=&$provider=com.cloudbees.plugins.credentials.CredentialsSelectHelper%24ItemContextResolver&$token=test

Request URL: http://Jenkinsci.company.com:8080/jenkins/descriptorByName/com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl/checkId?value=asdad&$provider=com.cloudbees.plugins.credentials.CredentialsSelectHelper%24ItemContextResolver&$token=test

Request URL: http://Jenkinsci.company.com:8080/jenkins/descriptor/com.cloudbees.plugins.credentials.CredentialsSelectHelper/resolver/com.cloudbees.plugins.credentials.CredentialsSelectHelper$ItemContextResolver/provider/com.cloudbees.hudson.plugins.folder.properties.FolderCredentialsProvider/context/test/addCredentials Request Method: POST

Request URL: http://Jenkinsci.company.com:8080/jenkins/job/test/job/tess/descriptorByName/hudson.plugins.git.UserRemoteConfig/fillCredentialsIdItems

失败

Request URL: https://prod.company.com/jenkins/descriptorByName/com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl/checkId?value=&$provider=com.cloudbees.plugins.credentials.CredentialsSelectHelper%24ItemContextResolver&$token=test1

Request URL: https://prod.company.com/jenkins/descriptorByName/com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl/checkId?value=sdfsr&$provider=com.cloudbees.plugins.credentials.CredentialsSelectHelper%24ItemContextResolver&$token=test1

知道不将 SSL 证书放入 jenkins 实例的情况下可能是什么问题和解决方法吗?

提前致谢。

4

1 回答 1

0

我与 Netscaler 团队进行了交谈,最初我们将 http 添加到 https 重定向,但它不起作用。
然后我与他们分享了下面的链接。

Jenkins 反向代理设置

在我们的设置中,Netscaler 是通过 https 访问的,但 Jenkins 是通过 HTTP 访问的。所以我们需要在 Netscaler 中为请求重写设置“X-Forwarded-Proto”标头。

最初,我们在 Netscaler 中为响应重写设置了 X-Forwarded-Proto" 标头,但它不起作用。请注意,日志非常少,调试会很困难。

希望这可以帮助某人。

于 2020-06-19T02:41:58.657 回答