Proxy Apache: Por que um vhost está retornando Proibido enquanto o outro está funcionando?

0

Eu tenho um aplicativo Java que precisa falar com outro site da intranet usando HTTPS em ambas as direções. Depois de lutar com implementações SSL do Java por algum tempo, eu desisti disso e agora configurei um Apache que deveria agir como um proxy reverso bidirecional:

external app ---(HTTPS request)---> Apache ---(local HTTP request)---> Java app

Essa direção funciona bem, mas a outra direção não:

Java app ---(local HTTP request)---> Apache ---(HTTPS request)---> external app

Esta é a configuração para o vhost que implementa o segundo proxy:

Listen 127.0.0.1:8081

<VirtualHost appgateway:8081>
   ServerName appgateway.local

   SSLProxyEngine on
   ProxyPass        / https://externalapp.corp:443/
   ProxyPassReverse / https://externalapp.corp:443/
   ProxyRequests Off
   AllowEncodedSlashes On

   # we do not need to apply any more restrictions here, because we listened on
   # local connections only in the first place (see the Listen directive above)
   <Proxy https://externalapp.corp:443/*>
      Order deny,allow
      Allow from all
   </Proxy>
</VirtualHost>

Um curl http://127.0.0.1:8081/ deve servir o equivalente a https://externalapp.corp , mas resulta em 403 Forbidden , com a seguinte mensagem no log de erros do Apache:

[Wed Jun 04 08:57:19 2014] [error] [client 127.0.0.1] Directory index forbidden by Options directive: /srv/www/htdocs/

Esta mensagem me intriga completamente: Sim, eu não configurei nenhuma permissão no DocumentRoot deste vhost, mas tudo funciona bem para a outra direção do proxy onde eu não tenho. Para referência, aqui está o outro vhost:

Listen this_vm_hostname:443

<VirtualHost javaapp:443>
   ServerName javaapp.corp

   SSLEngine on
   SSLProxyEngine on
   # not shown: SSLCipherSuite, SSLCertificateFile, SSLCertificateKeyFile
   SSLOptions +StdEnvVars

   ProxyPass        / http://localhost:8080/
   ProxyPassReverse / http://localhost:8080/
   ProxyRequests Off
   AllowEncodedSlashes On

   # Local reverse proxy authorization override
   <Proxy http://localhost:8080/*>
      Order deny,allow
      Allow from all
   </Proxy>
</VirtualHost>
    
por Stefan Majewsky 04.06.2014 / 11:18

1 resposta

1

Eu encontrei o problema. É a declaração <VirtualHost> :

<VirtualHost appgateway:8081> # broken
<VirtualHost *:8081>          # works

Devido à especificação errada do VirtualHost, as solicitações HTTP não corresponderam ao host virtual. Como nenhum host era aplicável, a configuração do host padrão foi usada, o que não tem um DocumentRoot válido, portanto, foi mostrada uma mensagem Proibida.

O outro host virtual funcionou "acidentalmente" porque seu nome corresponde ao nome do host da máquina.

    
por 23.09.2014 / 09:58