Дженкинс / Nginx-двойной запрос на базовую аутентификацию, почему? Почему существует внутренняя аутентификация Дженкинса?

Ниже приведен мой файл конфигурации 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;
}

}

при навигации в http://sub.mydomain.net/jenkins мне предлагают мой основной auth с сервер говорит: [....] Пожалуйста, подтвердите идентификацию....

это правильно, но как только я ввожу правильные учетные данные, я получаю СНОВА для basic auth еще раз, но на этот раз:сервер говорит: Дженкинс.

откуда берется этот второй скрытый basic_auth?! Для меня это не имеет никакого смысла.

удара отмена в первом приглашении я затем правильно получаю 401 требуется авторизация ошибка.

удара отмена на втором базовом auth ("сервер говорит: Дженкинс") я:

HTTP ERROR 401

Problem accessing /jenkins/. Reason:

Invalid password/token for user: _____
Powered by Jetty://

кто-нибудь знаешь, что происходит?

2 ответов


нашел решение моей проблемы, выполнив поиск 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 дополнительно перенаправит заголовки auth в Jenkins и это ведет к моему вопросу. Дженкинс получает перенаправленные заголовки auth, а затем думает, что ему тоже нужно авторизоваться?!

Если мы установим наш обратный прокси, чтобы не пересылать заголовки авторизации, как показано выше, то все работает так, как должно. Nginx предложит basic_auth и после успешной аутентификации мы явно очистим (сброс?) заголовки auth при пересылке на наш обратный прокси.


У меня также была эта проблема, в моем случае это было вызвано включением безопасности в самом Дженкинсе, отключение безопасности решило проблему.

по документам:

Если вы делаете контроль доступа в Apache, не включайте безопасность в Jenkins, так как эти две вещи будут мешать друг другу.

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

то, что кажется происходит то, что nginx пересылает auth_basic ответ Дженкинсу, который пытается выполнить auth_basic в ответ. Я еще не нашел удовлетворительного решения этой проблемы.