Виртуальный хост 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.


person Kai    schedule 27.10.2010    source источник
comment
Возможно, вам лучше спросить об этом на serverfault.com   -  person Mech Software    schedule 27.10.2010
comment
Хорошо ли это работает, если вы идете прямо к https://billing.example.com/? Я не уверен, что стал бы полностью переписывать все пространство URI с HTTP на HTTPS: это заставит все запросы, сделанные через HTTP, работать так, как если бы они были через HTTPS, и люди, как правило, отключают уведомление о том, что они собираются с HTTPS на HTTP, чтобы они не заметили (небезопасное) перенаправление. Вероятно, лучше сделать так, чтобы он не работал, если используется HTTP (или, по крайней мере, перенаправить все в корень: https://billing.example.com/).   -  person Bruno    schedule 27.10.2010
comment
Аналогичный вопрос по серверной ошибке. Однако решения нет :( serverfault.com/questions/226040/   -  person theon    schedule 21.08.2012
comment
Добавлено решение вопроса о сбое сервера.   -  person theon    schedule 25.08.2012


Ответы (2)


У меня была эта проблема с 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 - и это, похоже, сработало.

person theon    schedule 22.08.2012

Для части ssl вы можете включить UseCanonicalName Off Для виртуальных хостов вы, вероятно, используете домен, отличный от основного сервера, и это может привести к поиску файлов за пределами виртуального хоста.

Для полноты на порту 80 я бы добавил [R, L] к перенаправлению.

RewriteEngine  On
RewriteRule    ^/(.*) http://billing.example.com/$1 [L,R]
person Bruce Armstrong    schedule 28.10.2010