Exibindo páginas de erros customizadas em VirtualHosts diferentes no Apache

4

Eu tenho um proxy reverso do Apache que está movendo a solicitação para um servlet do Tomcat. A configuração no host virtual no Apache é:

<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1

ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>

Essencialmente, se se trata de 10.10.10.10 e solicita /Site1/ServLet1 , direcione-o para /Site1/ServLet1 .

se eu adicionar

<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html

ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>

para mostrar um erro personalizado para site1 (eu configurei o ErrorDocument), ele será servido para ambos.

Como posso ter uma página de erro 404 diferente por site, mantendo esse tipo de configuração?

Obrigado

Editar:

se eu modificar a configuração com base nos comentários abaixo, como:

<Location /Site1/ServLet1/>
ProxyPass http://1.1.1.1/Site1/ServLet1
ProxyPassReverse http://1.1.1.1/Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html
</Location>

Então, ainda posso acessar http://1.1.1.1/Site1/ServLet1 , mas nenhuma página de erro é exibida

    
por Mr Aleph 09.03.2012 / 17:45

2 respostas

4

Eu não tenho certeza do que você quer dizer com "VirtualHosts diferentes", já que eles são os mesmos ... mas eu acho que você vai querer fazer algo assim (e considerar mover as instruções ProxyPass para o <Location> bloqueia também, se você puder):

<VirtualHost 10.10.10.10:80>
    ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
    ProxyPassReverse /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1

    <Location /Site1>
        ErrorDocument 404 /customerrors/site1/404.html
    </Location>

    ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
    ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2

    <Location /Site2>
        ErrorDocument 404 /customerrors/site2/404.html
    </Location>
</VirtualHost>

Editar:

Para que as instruções Proxy residam nos blocos de localização:

<VirtualHost 10.10.10.10:80>
    <Location /Site1>
        ErrorDocument 404 /customerrors/site1/404.html
    </Location>
    <Location /Site1/ServLet1>
        ProxyPass http://1.1.1.1/Site1/ServLet1
        ProxyPassReverse http://1.1.1.1/Site1/ServLet1
    </Location>

    <Location /Site2>
        ErrorDocument 404 /customerrors/site2/404.html
    </Location>    
    <Location /Site2/ServLet2>
        ProxyPass http://2.2.2.2/Site2/ServLet2
        ProxyPassReverse http://2.2.2.2/Site2/ServLet2
    </Location>
</VirtualHost>
    
por 09.03.2012 / 17:56
4

Faça com que cada vhost tenha sua própria definição de VirtualHost.

<VirtualHost 10.10.10.10:80>
    Servername site1.tld
    ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
    ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
    ErrorDocument 404 /customerrors/site2/404.html
</VirtualHost>

<VirtualHost 10.10.10.10:80>
    ServerName site2.tld
    ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
    ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
    ErrorDocument 404 /customerrors/site2/404.html
</VirtualHost>

Você também precisará garantir uma definição adequada de NameVirtualHost .

    
por 09.03.2012 / 18:59