Корректный реверс Apache проксирует конфигурацию с SSL для Jenkins и Гидролокатора

Я выполняю два сервиса позади сервера 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 был счастлив? Бонусные очки для подсказок относительно того, как улучшить апачский файл конфигурации.

Я уже проверил следующие два связанных вопроса:

11
задан 13 April 2017 в 15:14
3 ответа

На этой странице вики Дженкинс упомянул, что как на июль 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>
9
ответ дан 2 December 2019 в 21:53

Настройка переднего конца Windows Apache для Jenkins

Основные различия здесь:

  • Как настроить временный сертификат
  • остановку крыла apache об отсутствии ssl кэша

Моя настройка:

  • Установка была на 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 - скрыть параметры.

1
ответ дан 2 December 2019 в 21:53

Я создал контейнер Docker для запуска Apache2 в качестве обратного прокси-сервера для Sonarqube на том же хосте.

Следуйте исходному коду. https://github.com/clebermasters/sonarqube-https-apache2

0
ответ дан 4 May 2021 в 10:16

Теги

Похожие вопросы