Почему я получаю страницу ошибки сервера apache на виртуальном хосте django, используя подчеркивание в моем поддомене?

Я использую джанго 1.5.0 и апач 2.2.22. Кажется, я не могу заставить свой сайт работать как именованный виртуальный хост (у меня есть другие сайты django, которые уже нормально работают на этом сервере).

Я получаю стандартную страницу ошибки apache 500. Мой журнал ошибок показывает, что у меня проблема с настройкой ALLOWED_HOSTS -

[Tue Jun 04 10:25:22 2013] [error] [client 31.52.39.247] SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): sub_domain.mydomain.com

Но моя настройка ALLOWED_HOSTS выглядит нормально -

python manage.py shell
>> from django.conf import settings
>> settings.ALLOWED_HOSTS
['sub_domain.mydomain.com', 'livedomain.com']

Кроме того, я не знаю, почему я получаю страницу apache 500, а не страницу отладки django -

>> settings.DEBUG
True

Глядя на полную трассировку стека в журнале ошибок, я вижу, что приложение wsgi работает — оно определенно запускает код django.

Какие-либо предложения?


person Aidan Ewen    schedule 04.06.2013    source источник
comment
ALLOWED_HOSTS следует вообще игнорировать, когда вы находитесь в DEBUG=True, так что это странно. У меня была проблема, похожая на эту, с NGinx, где у меня было подчеркивание в имени моего хоста, что означало, что Django не проверял его. Это может быть проблемой, особенно если у вас есть Apache, переписывающий заголовок вашего хоста (это было в случае со мной, поскольку nginx был обратным проксированием)   -  person Timmy O'Mahony    schedule 04.06.2013
comment
Это интересно - у меня есть подчеркивание в имени моего субдомена. Мне придется изменить свой dns, чтобы проверить это ..   -  person Aidan Ewen    schedule 04.06.2013
comment
Вы можете увидеть регулярное выражение, которое проверяет хосты, здесь: https://github.com/django/django/blob/master/django/http/request.py#L27 Я собираюсь добавить это как ответ, как будто это не решит вашу проблему, но все равно поможет другим в будущем скорее всего   -  person Timmy O'Mahony    schedule 04.06.2013


Ответы (1)


Во-первых, ALLOWED_HOSTS следует вообще игнорировать, когда у вас есть DEBUG=True, поэтому странно, что вы получаете ошибки проверки.

У меня была проблема, похожая на эту, с nginx, где у меня было подчеркивание в имени моего хоста, что означало, что Django не проверял его. Это может быть проблемой, особенно если у вас есть Apache, переписывающий заголовок вашего хоста (это было в случае со мной, поскольку nginx был обратным проксированием) или ваш поддомен включает _.

Вы можете увидеть, как Django проверяет имена хостов в исходном коде кроме того, я написал короткую запись в блоге об этом также может помочь

person Timmy O'Mahony    schedule 04.06.2013
comment
да, это было - Спасибо, Тимми! - person Aidan Ewen; 05.06.2013