Je passe deux services derrière un serveur Apache: Jenkins (Port 8080) et Sonarqube (Port 9000).
Ma configuration Apache ressemble à ceci:
<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>
Tout semble fonctionner bien, sauf que Jenkins se plaint de ce message: Il apparaît que votre proxy inverse configuré est cassé.
Lorsque j'exécute le test SystemProxYsepMonitor Fourni par Jenkins, le message d'erreur indique que quelque chose avec le proxy inverse n'est pas configuré correctement, comme cela ne remplace pas HTTP avec 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
[...]
Ceci est uniquement apparu après J'ai activé SSL sur le serveur (qui utilise maintenant un certificat auto-signé).
Question: Comment puis-je corriger la configuration de proxy inverse afin que Jenkins soit heureux? Points bonus pour des conseils sur la manière d'améliorer le fichier de configuration Apache.
J'ai déjà vérifié les deux questions connexes suivantes:
Configuration de Windows Apache Front-End pour Jenkins
Les principales différences ici sont:
Ma configuration:
L'installation était à D:\(pas c:\- Adaptez ceci à vos besoins)
Jenkins est sur le port 8080
Décompressez Apache httpd-2.4.18-win64-vc14.zip (à partir de - http://www.apachelounge.com/download/ ) à D: \.
Installez OpenSSL Win64OPENSSL_Light-1_0_2F.exe ( http://slproweb.com/products/win32openssl.html ) à D:\OpenSSL-Win64
Créez le certificat SSL:
cD dans le répertoire bin OpenSSL et exécuter la magie:
pushd d:\OpenSSL-Win64\bin
set OPENSSL_CONF=openssl.cfg
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Copier le serveur. * Fichiers de D:\OpenSSL-Win64\bin à D:\apache24\Conf
Edit D:\Apache24\Conf\httpd.conf:
Rechercher et remplacer "C: /" avec "D: /"
Changement après la ligne "Écoutez 80", ajouter "Écouter 443":
Listen 80
Listen 443
Décotez ces lignes:
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Mise à jour "#Servername www.example.com:80" à:
ServerName myserver.mydomain:80
Ajoutez ceci à la fin:
<IfModule socache_shmcb_module>
SSLSessionCache "shmcb:logs/ssl_scache(512000)"
</IfModule>
<VirtualHost *:80>
ServerName myserver
Redirect permanent / https://myserver.mydomain/
</VirtualHost>
<VirtualHost *:80>
ServerName myserver.mydomain
Redirect permanent / https://myserver.mydomain/
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key
ServerAdmin me@mydomain
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://myserver.mydomain/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
Je n'ai pas arrêté Jenkins en écoutant sur le port 8080, je peux donc toujours vous connecter si Apache échoue. Mon objectif dans l'utilisation de HTTPS est de masquer les paramètres.