Estou executando dois serviços atrás de um servidor Apache: Jenkins (porta 8080) e SonarQube (porta 9000).
Minha configuração do apache fica assim:
<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>
Tudo parece estar funcionando bem, exceto que Jenkins está reclamando com esta mensagem: Parece que sua configuração de proxy reverso está corrompida.
Quando executo o teste ReverseProxySetupMonitor fornecido por Jenkins, a mensagem de erro indica que algo com o proxy reverso não está configurado corretamente, pois não substitui http por 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
[...]
Isso só apareceu depois que eu ativei o SSL no servidor (que agora está usando um certificado autoassinado).
Pergunta: Como faço para corrigir a configuração do proxy reverso para que Jenkins fique feliz? Pontos de bônus para obter dicas sobre como melhorar o arquivo de configuração do apache.
Eu já verifiquei as duas perguntas relacionadas a seguir:
fonte
sudo a2enmod headers
, caso contrário eu iria ficarInvalid command 'RequestHeader'
ProxyPassReverse
diretivas para o mesmo caminho (/
)?Instalação do Windows Apache Front-end para Jenkins
As principais diferenças aqui são:
Minha configuração:
A instalação foi para d: \ (não c: \ - adapte isso às suas necessidades)
Jenkins está na porta 8080
Descompacte o Apache httpd-2.4.18-win64-VC14.zip (de http://www.apachelounge.com/download/ ) para d: \.
Instale o OpenSSL Win64OpenSSL_Light-1_0_2f.exe ( http://slproweb.com/products/Win32OpenSSL.html ) em d: \ OpenSSL-Win64
Crie o certificado ssl:
cd para o diretório bin do OpenSSL e execute a mágica:
Copie os arquivos server. * De d: \ OpenSSL-Win64 \ bin para D: \ Apache24 \ conf
Edite d: \ Apache24 \ conf \ httpd.conf:
Pesquise e substitua "c: /" por "d: /"
Mude após a linha "Listen 80", adicionando "Listen 443":
Remova o comentário destas linhas:
Atualize "#ServerName www.example.com:80" para:
Adicione isso no final:
Eu não parei o Jenkins de escutar na porta 8080, então ainda posso conectar se o apache falhar. Meu objetivo ao usar https é ocultar parâmetros.
fonte