Authentication Jenkins/Nginx-双重提示输入基本身份验证,为什么?为什么会有内部詹金斯认证?

Authentication Jenkins/Nginx-双重提示输入基本身份验证,为什么?为什么会有内部詹金斯认证?,authentication,nginx,jenkins,nginx-location,Authentication,Nginx,Jenkins,Nginx Location,下面是我针对Jenkins的nginx配置文件。大部分内容与我在文档中读到的完全一致 配置文件: 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_

下面是我针对Jenkins的nginx配置文件。大部分内容与我在文档中读到的完全一致

配置文件:

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;
}
}

导航到时,服务器提示我输入基本身份验证:[……]请确认识别

这是正确的,但是一旦我输入了正确的凭证,我就会再次得到提示进行基本身份验证,但这次:服务器显示:Jenkins

第二个隐藏的基本身份是从哪里来的?!这对我来说毫无意义

在第一个提示中点击CANCEL,我将正确地收到一个401所需授权错误

在第二个基本身份验证(“服务器说:Jenkins”)上点击CANCEL,我得到:


有人知道可能发生了什么吗

我也有这个问题,在我的例子中,它是由jenkins本身启用了安全性引起的,禁用安全性解决了这个问题

根据他们的文件:

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


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

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

答案如下:

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

 # Don't forward auth to Tomcat
 proxy_set_header   Authorization "";
默认情况下,在基本身份验证之后,Nginx将额外地将身份验证头转发给Jenkins,这就是导致我的问题的原因。Jenkins收到转发的auth头,然后认为它也需要授权自己


如果我们将反向代理设置为如上所示不转发任何授权头,那么一切都会正常工作。Nginx将提示basic_auth,成功验证后,我们将在转发到反向代理时明确清除(重置?)验证头。

感谢您的回复!正如您将在下面看到的,我找到了我们问题的解决方案,但我认为您的文档链接实际上可能会显示未来的问题,并且很高兴看到这些问题。在您的文档链接之前,它说,“如果访问控制需要过于简单(例如对每个人隐藏Jenkins,但对少数人除外),那么这种方法是合适的,但是如果您开始进行更复杂的设置,它往往会崩溃……”这是我们要做的?我想允许组织中的人仍然访问Jenkins(通过nginx basic auth),但不修改它。非常感谢您解决了我的问题。经过几个小时的搜索和谷歌搜索…拯救了我的一天!非常感谢。顺便说一句,对于apache,它将是
RequestHeader set Authorization”“
 # Don't forward auth to Tomcat
 proxy_set_header   Authorization "";