Почему Дженкинс жалуется, что моя обратная настройка прокси нарушена?
Я понятия не имею, почему после того, как Дженкинс обновлен до версии 1.591 (Ubuntu Server 12.04), первоначально правильно настроенный обратный прокси-сервер Теперь становится сломанным. Моя текущая настройка точно такая же, как сказано в Jenkins wiki:
ProxyPass /jenkins http://localhost:8081/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8081/jenkins
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8081/jenkins*>
Order deny,allow
Allow from all
</Proxy>
и --prefix=/jenkins
добавлен
Это ошибка в Jenkins?
6 ответов
я столкнулся с этой проблемой с Дженкинсом в качестве пакета службы Windows.
по их wiki:
убедитесь, что URL-адрес Jenkins, настроенный в конфигурации системы, соответствует URL-адресу, который вы используете для доступа к Jenkins.
для достижения конфигурации системы:
- перейти на страницу Дженкинса
- Нажмите Управление Дженкинс
- Нажмите Кнопку Настроить Система
- свиток Расположение Дженкинс и найдите URL Дженкинса.
убедитесь, что значение порта совпадает со значением порта, заданным в на Дженкинс.в XML файл, расположенный в папке Jenkins на вашем компьютере.
для меня, исправление было добавить:
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Это заставило его перестать жаловаться.
оказывается, все работает нормально, даже если раздражающее сообщение постоянно появляется. Я думаю, что это незначительная ошибка версии.
здесь ссылка ясно заявляет, что что-то изменилось после 1.552, поэтому добавление этих новых строк;
nocanon and AllowEncodedSlashes
решена моя проблема и предупреждение исчезло.
для nginx, это также помогло мне:
proxy_redirect http://localhost:8080 https://your.ssl.domain.name
не включите любые конечные косые черты в вышеуказанные URL-адреса и и не до proxy_pass
URL-адрес.
Дженкинс имеет активный мониторинг, чтобы убедиться, что прямой и обратный прокси настроен правильно. В версии 1.552 эти тесты были улучшены, так что теперь обнаружены неправильные настройки прокси, которые ранее не были помечены как сломанные. Начиная с версии 1.572, даже экземпляры Jenkins, которые не полагаются на обратный прокси, будут отображать это предупреждение.
исправление сломанной конфигурации обратного прокси-сервера сильно зависит от вашего веб-сервера и контейнера веб-приложения, который почему существует так много других ответов на ваш вопрос. Статья Дженкинса на эту тему:"Дженкинс говорит, что моя обратная настройка прокси сломана", описывает несколько способов, чтобы исправить это в комментариях.
из приведенной выше статьи:
для правильной работы обратного прокси-сервера необходимо переписать оба запрос и ответ.
но правильное обратное проксирование также включает в себя один из двух вариантов:
- переписывание ответа; или
- установка заголовка X-Forwarded-Host (и, возможно, X-Forwarded-Port) в перенаправленном запросе.
в моем случае это была проблема с первым вариантом, где моя переписывание ответа не было правильно кодировать косые черты. Если вы используете Apache HTTPD с Tomcat, вам нужно добавить поддержку кодированных косых черт в и серверы, а не только Apache HTTPD.
это инструкции по решению этой проблемы в моем конкретном случае: Jenkins 2.1.41 на экземпляре Amazon Linux EC2 с Apache 2.4, Tomcat 8.5 и Tomcat Connector.
на /etc/httpd/conf.d/ssl.conf
добавьте следующую строку для вашего Jenkins Host
или VirtualHost
:
AllowEncodedSlashes NoDecode
добавьте следующую строку в /usr/share/tomcat8/conf/catalina.properties
:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
перезапустить обе службы:
service httpd restart
service tomcat8 restart
обновите страницу Управления Jenkins. Предупреждающее сообщение исчезнет.
An пример реализации второго варианта в Apache HTTPD:
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
и для NGINX:
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;