Jenkins / Nginx – Double提示进行基本authentication,为什么? 为什么有一个内部Jenkins身份validation?

下面是Jenkins的nginxconfiguration文件。 其中大部分完全按照我在文档中阅读。

configuration文件:

upstream app_server { server 127.0.0.1:8080 fail_timeout=0; } server { listen 80; listen [::]:80 default ipv6only=on; server_name sub.mydomain.net; location ^~ /jenkins/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://app_server; break; } auth_basic "[....] Please confirm identity..."; auth_basic_user_file /etc/nginx/.htpasswd; } 

}

当导航到http://sub.mydomain.net/jenkins我得到提示我的基本身份validation与服务器说:[…]请确认身份…。

这是正确的,但只要我input正确的凭据,我再次获得PROMPTED再次基本身份validation,但这次: 服务器说:jenkins

第二个隐藏的basic_auth来自哪里? 这对我没有任何意义。

打在第一个提示取消我然后正确地收到401授权所需的错误。

打到第二个基本身份validation取消“服务器说:jenkins” )我得到:

 HTTP ERROR 401 Problem accessing /jenkins/. Reason: Invalid password/token for user: _____ Powered by Jetty:// 

有谁知道可能发生了什么?

找到我的问题的解决方案,通过搜索Nginx作为任何其他应用程序与basic_auth反向代理。

解决方案是在这里找到答案: https : //serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy

我从nginx配置中缺少的行是:

  # Don't forward auth to Tomcat proxy_set_header Authorization ""; 

默认情况下,看起来基本验证后,Nginx会将验证头文件转发给Jenkins,这就是导致我的问题的原因。 詹金斯收到转发的验证标题,然后认为它也需要自己授权呢?!

如果我们将反向代理设置为不转发任何授权标头,如上所示,那么一切正常。 Nginx将会提示basic_auth,并且在成功认证之后,当转发到我们的反向代理时,我们明确地清除(重置?)auth头。

我也有这个问题,在我的情况下,这是由jenkins本身启用安全性,禁用安全解决了这个问题。

根据他们的文档:

如果您在Apache中执行访问控制,请不要在Jenkins中启用安全性,因为这两件事会相互干扰。

https://wiki.jenkins-ci.org/display/JENKINS/Apache+frontend+for+security

似乎发生的事情是,nginx将auth_basic响应转发给jenkins,jenkins尝试执行auth_basic作为响应。 我还没有找到令人满意的解决方案。