Дженкинс / 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 в ответ. Я еще не нашел удовлетворительного решения этой проблемы.