O mod_dir do Apache continua redirecionando para a porta errada

1

Eu tenho uma configuração com um HAProxy na frente de um cache Varnish que solicita um servidor Apache2.

O Apache está escutando em um IP interno na Porta 12345 e está configurado com UseCanonicalPhysicalPort Off para evitar o derramamento dessa porta somente para uso interno. Também testei diferentes combinações de UseCanonicalPhysicalPort e UseCanonicalName com On e Off . No entanto, apesar dessas diretivas canônicas, o Apache2 parece ter problemas ao receber uma solicitação para um diretório sem uma barra final:

UCPP: On, UCN: Not set:
Request:  https://www.example.org/test-page
Response: Redirect(301) to http://www.example.org:12345/test-page/

UCPP: On, UCN: On
Request:  https://www.example.org/test-page
Response: Redirect(301) to https://www.example.org:12345/test-page/


UCPP: Off, UCN: Off
Request:  https://www.example.org/test-page
Response: Redirect(301) without Location header

Isso obviamente não funcionará, já que essa porta é apenas interna. O site está executando um Joomla, que funciona bem com esta configuração, apenas as pastas que receberiam um redirecionamento do mod_dir não parecem funcionar. Minha configuração do Apache é assim:

<VirtualHost 192.168.150.100:12345>
    ServerName www.example.org

    UseCanonicalPhysicalPort Off
    UseCanonicalName On

    <Directory "/var/www/www.example.org">
    [...]
</VirtualHost>

Existe uma maneira de impedir esses redirecionamentos? Melhor seria prevenir os redirecionamentos errados dentro do Apache, mas eu estaria aberto para alterações de configuração no Varnish ou no HAProxy.

Observação: Por favor, não sugira usar a porta 80, pois tenho mais de uma porta no Apache usada pelo verniz (uma solução alternativa para fazer o VHosts funcionar melhor) e, portanto, isso não é uma opção.

    
por Izzy 02.02.2015 / 11:38

1 resposta

0

Um URL para um diretório sem uma barra final não é o URL canônico desse recurso, é por isso que o mod_dir redireciona o usuário. Esta é uma recomendação geral do W3C.

O redirecionamento com sua porta personalizada provavelmente está acontecendo porque o seu HAproxy ou Varnish está criando uma nova solicitação HTTP que está sendo enviada para o Apache. Seu apache recebe a primeira solicitação com a 12345 port já presente. É por isso que UseCanonicalName e UseCanonicalPhysicalPort parecem ineficazes.

Mas você pode impedir que o apache envie um redirecionamento definindo a diretiva mod_dir DirectorySlash como Off .

Se test-page for realmente um diretório existente em seu sistema de arquivos, isso deve funcionar bem.

    
por 25.01.2016 / 15:21