Estoy ejecutando dos servicios detrás de un servidor Apache: Jenkins (Puerto 8080) y SonarQube (Puerto 9000).
Mi configuración de apache se ve así:
<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>
Todo parece estar funcionando bien, excepto que Jenkins se queja con este mensaje: parece que su configuración de proxy inverso está rota.
Cuando ejecuto la prueba ReverseProxySetupMonitor proporcionada por Jenkins, el mensaje de error indica que algo con el proxy inverso no está configurado correctamente, ya que no reemplaza http con 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
[...]
Esto solo apareció después de habilitar SSL en el servidor (que ahora usa un certificado autofirmado).
Pregunta: ¿Cómo soluciono la configuración del proxy inverso para que Jenkins esté feliz? Puntos de bonificación para obtener consejos sobre cómo mejorar el archivo de configuración de apache.
Ya revisé las siguientes dos preguntas relacionadas:
fuente
sudo a2enmod headers
, de lo contrario me pondríaInvalid command 'RequestHeader'
ProxyPassReverse
directivas para la misma ruta (/
)?Configuración de front-end de Windows Apache para Jenkins
Las principales diferencias aquí son:
Mi configuración:
La instalación fue a d: \ (no c: \ - adapte esto a sus necesidades)
Jenkins está en el puerto 8080
Descomprima Apache httpd-2.4.18-win64-VC14.zip (de http://www.apachelounge.com/download/ ) en d: \.
Instale OpenSSL Win64OpenSSL_Light-1_0_2f.exe ( http://slproweb.com/products/Win32OpenSSL.html ) en d: \ OpenSSL-Win64
Cree el certificado SSL:
cd al directorio bin OpenSSL y ejecuta la magia:
Copie los archivos del servidor. * De d: \ OpenSSL-Win64 \ bin a D: \ Apache24 \ conf
Editar d: \ Apache24 \ conf \ httpd.conf:
Busque y reemplace "c: /" con "d: /"
Cambie después de la línea "Listen 80", agregando "Listen 443":
Descomente estas líneas:
Actualice "#ServerName www.example.com:80" a:
Agregue esto al final:
No dejé de escuchar a Jenkins en el puerto 8080, por lo que todavía puedo conectarme si falla Apache. Mi objetivo al usar https es ocultar los parámetros.
fuente