Почему Дженкинс жалуется, что моя обратная настройка прокси нарушена?

Я понятия не имею, почему после того, как Дженкинс обновлен до версии 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.

для достижения конфигурации системы:

  1. перейти на страницу Дженкинса
  2. Нажмите Управление Дженкинс
  3. Нажмите Кнопку Настроить Система
  4. свиток Расположение Дженкинс и найдите 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, которые не полагаются на обратный прокси, будут отображать это предупреждение.

исправление сломанной конфигурации обратного прокси-сервера сильно зависит от вашего веб-сервера и контейнера веб-приложения, который почему существует так много других ответов на ваш вопрос. Статья Дженкинса на эту тему:"Дженкинс говорит, что моя обратная настройка прокси сломана", описывает несколько способов, чтобы исправить это в комментариях.

из приведенной выше статьи:

для правильной работы обратного прокси-сервера необходимо переписать оба запрос и ответ.

но правильное обратное проксирование также включает в себя один из двух вариантов:

  1. переписывание ответа; или
  2. установка заголовка 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;