Jenkins relata a configuração de proxy reverso incorreta com o Apache usando hosts virtuais com SNI

4

Estou configurando um servidor Jenkins para ser executado no Tomcat, atrás do Apache. Estou usando hosts virtuais com SSL usando o SNI para que eu possa acessá-los no link e servir outra coisa, por exemplo, link .

Eu tenho tudo em funcionamento, mas quando clico em "Gerenciar Jenkins", ele me diz Parece que sua configuração de proxy reverso está quebrada .

Observe que estou usando um certificado SSL autoassinado e jenkins.example.com não é o host virtual padrão.

A configuração relevante do apache é assim:

<VirtualHost *:80>
        ServerName jenkins.example.com
        Redirect / https://jenkins.example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName jenkins.example.com

  SSLEngine on

  SSLCertificateFile    /etc/ssl/certs/jenkins.example.com.crt
  SSLCertificateKeyFile /etc/ssl/private/jenkins.example.com.key

  <Location />
     AuthType Digest
     AuthName "Jenkins"
     AuthUserFile "/etc/htpasswords"
     Require valid-user
   </Location>

   ProxyRequests     Off
   ProxyPreserveHost On

   <Proxy http://localhost:8080*>
     Order deny,allow
       Allow from all
   </Proxy>

   ProxyPass         /  http://localhost:8080/
   ProxyPassReverse  /  http://localhost:8080/
   ProxyPassReverse  /  https://jenkins.example.com

</VirtualHost>

Se eu fizer:

curl --user "username:password" --digest -k https://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test -L

Então eu vejo a saída:

<div/>

Se eu executo o wget com debug, então vejo que em algum ponto o wget obtém um ponteiro para http em vez de https, não tenho certeza do porque isso está acontecendo ou se está relacionado, mas redireciona corretamente:

---response begin---
HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Jan 2012 19:47:16 GMT
Server: Apache-Coyote/1.1
Location: http://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test-for-reverse-proxy-setup
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/plain

Eu estou rodando no Ubuntu 11.04, Apache 2.2.17, Tomcat 6.0.28, Jenkins 1.448.

    
por Lorin Hochstein 17.01.2012 / 21:08

3 respostas

6

O único problema que vejo com a sua configuração é que:

ProxyPassReverse  /  https://jenkins.example.com

Deve ser:

ProxyPassReverse  /  https://jenkins.example.com/

Parece que o serviço está enviando http:// em vez de https:// cabeçalhos de localização (provavelmente porque sua conexão com o ouvinte do Apache não está criptografada no ouvinte localhost). Nesse caso, você precisará adicionar:

ProxyPassReverse  /  http://jenkins.example.com/

Então, o que provavelmente está ocorrendo atualmente é que a chamada da API está falhando porque obtém um http:// de endereço no cabeçalho Location: do redirecionamento (o que é perdido para a não conversão no ProxyPassReverse porque não é http ).

Ele envia a solicitação para esse local e recebe outra resposta de redirecionamento, do seu <VirtualHost *:80> . Seu verificador de validade sabe que não está certo e erros, enquanto curl segue mais um redirecionamento e obtém uma resposta válida.

Adicione o ProxyPassReverse para http:// acima e isso deve corrigir o problema, se tiver razão.

    
por 17.01.2012 / 21:19
2

Se você usa o Apache como proxy reverso, ele precisa ser pelo menos 2.2.18 e definir a opção AllowEncodedSlashes NoDecode (versões anteriores têm apenas valores On e Off, ambos errados); bem como nocanon na diretiva ProxyPass .

Ambos precisam ser definidos dentro do VirtualHost, já que o AllowEncodedSlashes não é herdado.

<VirtualHost *:80>
        AllowEncodedSlashes NoDecode
        ServerName build.example.org
        ProxyPass         /  http://localhost:8080/ nocanon
        ProxyPassReverse  /  http://localhost:8080/
        ProxyRequests     Off
</VirtualHost>
    
por 19.06.2014 / 23:21
0

via link :

Verifique se o URL do Jenkins configurado na Configuração do sistema corresponde ao URL que você está usando para acessar o Jenkins.

Para alcançar a configuração do sistema:

  1. Vá para a sua página do Jenkins
  2. Clique em Gerenciar Jenkins
  3. Clique em Configurar sistema
  4. Vá até Localização do Jenkins e encontre o URL do Jenkins.

Verifique se o valor da porta corresponde ao valor da porta definido na seção <arguments> do arquivo jenkins.xml , localizado na pasta Jenkins da sua máquina.

    
por 07.01.2016 / 18:51