VHOST habilitado para SSL Apache retorna aleatório 400 Bad Solicy
Pergunta
Eu configurei dois vhosts locais (http e https autoassinados) para billing.example.com e experimentando-os no Firefox com o Firebug. O único objetivo HTTP VHOST está redirecionando todas as solicitações para HTTPS.
Quase cada vez que solicito a página de https, um ou dois arquivos com recursos associados (imagens, js, css, etc ...) e às vezes a página PHP retorna 400 solicitação ruim na janela do Firebug, às vezes um ou dois arquivos exibidos conforme carregado para muito tempo. Quando clico no link Problema no Firebug, o arquivo carrega como deveria. Além disso, os arquivos de solicitação ruim ou não carregam mudam quase cada vez que estou carregando a página.
Alguma ideia?
Servidor: Ubuntu 10.04, Apache/2.2.14 com mod_ssl
Vhosts:
Listen 80
<VirtualHost *:80>
ServerName billing.example.com
UseCanonicalName On
DocumentRoot /code/site/billing
...
RewriteEngine On
RewriteRule ^/(.*)$ https://billing.example.com/$1
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName billing.example.com
UseCanonicalName On
DocumentRoot /code/site/billing
...
SSLEngine On
SSLCertificateFile /code/site/ssl/example.crt
SSLCertificateKeyFile /code/site/ssl/example.key
</VirtualHost>
REST são configurações padrão do Ubuntu Apache2.
Solução
Eu estava tendo esse problema com o Apache 2.2.9 e a atualização para o Apache 2.2.22 resolveu o problema para mim.
Eu receberia códigos de resposta 400 aleatórios em algumas das solicitações da página. Às vezes, imagens, às vezes solicitações de Ajax. Ocasionalmente, seria a própria página que retornaria um 400 junto com esta mensagem.
Pedido ruim que seu navegador enviou uma solicitação que esse servidor não conseguia entender. O campo de cabeçalho de solicitação está ausente ':' Separator. viver
Encontrei o seguinte relatório do tapete para isso parecia relacionado. O bug foi corrigido no Apache 2.2.15: https://bugzilla.redhat.com/show_bug.cgi?id=652335
Eu acho que esse bug é a causa de muitos erros aleatórios ao usar o HTTPS: seu navegador enviou uma solicitação de que esse servidor não pudesse entender o campo do cabeçalho da solicitação está ausente ':' Separator.
Então, pensei em tentar atualizar para o mais recente Apache com o mais recente MOD_SSL - e isso parecia funcionar.
Outras dicas
Para a parte SSL, você pode querer virar UseCanonicalName Off
Para hosts virtuais, você provavelmente está usando um domínio diferente do servidor principal e isso pode fazer com que você procure arquivos fora do host virtual.
Para completar na porta 80, eu adicionaria [r, l] ao redirecionamento.
RewriteEngine On
RewriteRule ^/(.*) http://billing.example.com/$1 [L,R]