Я настраиваю сервер Jenkins для работы под Tomcat за Apache. Я использую виртуальные хосты с SSL и SNI, поэтому могу получить к нему доступ по адресу https://jenkins.example.com, и подавать что-нибудь еще, скажем, http://www.example.com.
У меня он запущен и работает, но когда я нажимаю "Управление Дженкинсом", он сообщает мне Похоже, ваша установка обратного прокси-сервера не работает.
Обратите внимание, что я использую самоподписанный сертификат SSL, а jenkins.example.com не является виртуальным хостом по умолчанию.
Соответствующая конфигурация apache выглядит так:
<VirtualHost *:80>
ServerName jenkins.example.com
Redirect / https://jenkins.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName jenkins.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/jenkins.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/jenkins.example.com.key
<Location />
AuthType Digest
AuthName "Jenkins"
AuthUserFile "/etc/htpasswords"
Require valid-user
</Location>
ProxyRequests Off
ProxyPreserveHost On
<Proxy http://localhost:8080*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / https://jenkins.example.com
</VirtualHost>
Если я сделаю:
curl --user "username:password" --digest -k https://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test -L
Затем я вижу результат:
<div/>
Если я запускаю wget с отладкой, я вижу, что в какой-то момент wget получает указатель на http вместо https, не знаю, почему это происходит или связано ли это, но перенаправляет правильно:
---response begin---
HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Jan 2012 19:47:16 GMT
Server: Apache-Coyote/1.1
Location: http://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test-for-reverse-proxy-setup
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/plain
Я использую Ubuntu 11.04, Apache 2.2.17, Tomcat 6.0.28, Jenkins 1.448.
Единственная проблема, которую я вижу с вашей конфигурацией, заключается в следующем:
ProxyPassReverse / https://jenkins.example.com
Должно быть:
ProxyPassReverse / https://jenkins.example.com/
Похоже, служба отправляет http://
вместо того https://
заголовки местоположения (возможно, потому что ваше соединение с его слушателем из Apache не зашифровано в слушателе localhost), и в этом случае вам нужно добавить:
ProxyPassReverse / http://jenkins.example.com/
Итак, в настоящее время, вероятно, происходит сбой вызова API из-за того, что он получает http://
адрес в Location:
заголовок редиректа (который пропущен из-за отсутствия перевода в ProxyPassReverse
потому что это не http
).
Он отправляет запрос в это место и получает другой перенаправить ответ от вашего <VirtualHost *:80>
. Их средство проверки достоверности знает, что это не так и ошибки, в то время как curl
выполняет еще одно перенаправление и получает правильный ответ.
Добавить ProxyPassReverse
для http://
выше, и это должно исправить проблему, если я прав.
Если вы используете Apache в качестве обратного прокси, он должен быть не ниже 2.2.18 и установить параметр AllowEncodedSlashes NoDecode
(в более ранних версиях есть только значения On и Off, оба из которых неверны); так же как nocanon
в ProxyPass
директива.
Оба должны быть установлены в VirtualHost, поскольку AllowEncodedSlashes не наследуется.
<VirtualHost *:80>
AllowEncodedSlashes NoDecode
ServerName build.example.org
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyRequests Off
</VirtualHost>
через https://stackoverflow.com/a/33179008/923560:
Убедитесь, что URL-адрес Jenkins, настроенный в конфигурации системы, соответствует URL-адресу, который вы используете для доступа к Jenkins.
Чтобы перейти к конфигурации системы:
Убедитесь, что значение порта совпадает со значением порта, установленным в <arguments>
раздел jenkins.xml файл, расположенный в папке Jenkins на вашем компьютере.