Виртуальный хост Apache с поддержкой SSL возвращает случайный 400 неверных запросов
Вопрос
Я настроил два локальных виртуальных хоста (http и самоподписанный https) для billing.example.com и попробовал их в Firefox с помощью Firebug.Единственная цель Http vhost — перенаправить все запросы на https.
Почти каждый раз, когда я запрашиваю страницу с https, один или два файла со связанными ресурсами (изображения, js, css и т. д.), а иногда и сама страница php возвращает 400 неверных запросов в окне Firebug, иногда один или два файла отображаются как загруженные для долго.Когда я нажимаю на проблемную ссылку в Firebug, файл загружается так, как должен.Кроме того, неверный запрос или не загруженные файлы меняются почти каждый раз, когда я загружаю страницу.
Есть идеи?
Сервер:Ubuntu 10.04, Apache/2.2.14 с mod_ssl
Хосты:
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>
Остальные — настройки по умолчанию из Ubuntu Apache2.
Решение
У меня возникла проблема с Apache 2.2.9, и обновление до Apache 2.2.22 решило проблему.
На некоторые запросы страниц я получал случайные 400 кодов ответа.Иногда изображения, иногда запросы AJAX.Иногда сама страница возвращала 400 вместе с этим сообщением.
Плохой запрос ваш браузер отправил запрос, чтобы этот сервер не мог понять.В поле заголовка запроса отсутствует разделитель «:».жить
Я нашел следующий отчет о ковре, который показался мне связанным.Ошибка была исправлена в Apache 2.2.15: https://bugzilla.redhat.com/show_bug.cgi?id=652335
Я думаю, что эта ошибка является причиной множества случайных ошибок при использовании https:Ваш браузер отправил запрос, чтобы этот сервер не мог понять поле заголовка запроса »:« Разделитель.
Поэтому я подумал, что попробую обновиться до последней версии Apache с последней версией mod_ssl - и это, похоже, сработало.
Другие советы
Для части SSL вы можете повернуть UseCanonicalName Off
Для виртуальных хостов вы, скорее всего, используете другой домен, чем основной сервер, и это может привести к поиску файлов за пределами виртуального хоста.
Для полноты на порту 80 я бы добавил [R, L] на перенаправление.
RewriteEngine On
RewriteRule ^/(.*) http://billing.example.com/$1 [L,R]