Я выполняю два сервиса позади сервера Apache: Jenkins (Порт 8080) и SonarQube (Порт 9000).
Моя апачская конфигурация похожа на это:
<VirtualHost *:80>
ServerName server
Redirect permanent / https://server.domain.com/
</VirtualHost>
<VirtualHost *:80>
ServerName server.domain.com
Redirect permanent / https://server.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName server.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ProxyPass /jenkins http://localhost:8080/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8080/jenkins
ProxyPassReverse /jenkins http://server.domain.com/jenkins
ProxyPassReverse /jenkins https://server.domain.com/jenkins
ProxyPass /sonar http://localhost:9000/sonar nocanon
ProxyPassReverse /sonar http://localhost:9000/sonar
AllowEncodedSlashes NoDecode
ProxyRequests Off
ProxyPreserveHost On
<Proxy http://localhost:8080/*>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
Все, кажется, хорошо работает, за исключением того, что Jenkins жалуется с этим сообщением: кажется, что Ваш обратный настроенный прокси повреждается.
То, когда я запускаю тест ReverseProxySetupMonitor, обеспеченный Jenkins, сообщение об ошибке указывает, что что-то с обратным прокси не настраивается правильно, как, не заменяет http https:
$ curl -iLk -e https://server.domain.com/jenkins/manage https://server.domain.com/jenkins/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test
[...]
404 http://server.domain.com/jenkins/manage vs. https://server.domain.com/jenkins/manage
[...]
Это только появилось после того, как я включил SSL на сервере (который теперь использует самоподписанный сертификат).
Вопрос: Как я фиксирую обратную установку прокси так, чтобы Jenkins был счастлив? Бонусные очки для подсказок относительно того, как улучшить апачский файл конфигурации.
Я уже проверил следующие два связанных вопроса:
На этой странице вики Дженкинс упомянул, что как на июль 2014 года ,рекомендуемая конфигурация для обратного прокси Jenkins. Отсутствует параметр RequestHeader set X-Forwarded-Proto "https"
и RequestHeader set X-Forwarded-Port "443"
Таким образом, конфигурация стала
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
ServerAdmin webmaster@localhost
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / http://www.example.com/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
Настройка переднего конца Windows Apache для Jenkins
Основные различия здесь:
Моя настройка:
Установка была на d:\ (а не на c:\ - адаптируйте это под свои нужды)
Jenkins на порту 8080
Распаковка Apache httpd-2. 4.18-win64-VC14.zip (с http://www.apachelounge.com/download/) на d:http://slproweb.com/products/Win32OpenSSL.html .
Установите OpenSSL Win64OpenSSL_Light-1_0_2f.exe (\) на d:\OpenSSL-Win64
Создайте ssl сертификат:
cd в каталог bin OpenSSL и запустите волшебство:
pushd d:\OpenSSL-Win64\bin.
установить OPENSSL_CONF=openssl.cfg
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Скопируйте файлы server.* с d:\OpenSSL-Win64\bin на D:\Apache24\conf
Редактирование d:\Apache24\conf\httpd.conf :
Поиск и замена "c:/" на "d:/"
Изменение после строки "Слушай 80", добавление "Слушай 443":
Слушай 80.
Слушай 443
Не комментируйте эти строки:
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module модули/mod_proxy_ajp.so
LoadModule proxy_http_module модули/mod_proxy_http.so
LoadModule rewrite_module модули/mod_rewrite.so
LoadModule socache_shmcb_module модули/mod_socache_shmcb.so
Загрузить модуль ssl_module модули/mod_ssl.so
LoadModule vhost_alias_module модули/mod_vhost_alias.so
Обновление "#ServerName www.example.com:80" до:
Имя сервера myserver.mydomain:80
Добавьте это в конце:
.
SSLSessionCache "shmcb:logs/ssl_scache(512000)".
Имя_сервера
Перенаправление постоянное / https://myserver.mydomain/
Имя сервера myserver.mydomain
Перенаправление постоянное / https://myserver.mydomain/
двигатель SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.ключевой
ServerAdmin me@mydomain
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Прокси*
Отменить заказ, разрешить
Разрешить от всех
<Прокси>
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/.
ProxyPassReverse / http://myserver.mydomain/.
RequestHeader установил X-Forwarded-Proto "https".
Комплект RequestHeader X-Forwarded-порт "443".
Я не остановил Дженкинса, прослушивая порт 8080, так что я все еще могу подключиться, если апач откажет. Моя цель в использовании https - скрыть параметры.
Я создал контейнер Docker для запуска Apache2 в качестве обратного прокси-сервера для Sonarqube на том же хосте.
Следуйте исходному коду. https://github.com/clebermasters/sonarqube-https-apache2