#python #django #apache #mod-wsgi #scrypt
#python #django #apache #mod-wsgi #scrypt
Вопрос:
Я запускаю экземпляр ec2 для размещения некоторых веб-сайтов Django. Веб-сайты обслуживаются Apache с использованием mod_wsgi
Уже несколько дней я пытаюсь развернуть новую веб-платформу, которую мы разрабатываем, но я сталкиваюсь с проблемой, которая кажется мне неразрешимой. По соображениям безопасности мы используем scrypt 0.4 для защиты личной информации пользователей, такой как пароли.
На сервере разработки все работает как по маслу, но при развертывании на нашем действующем сервере мы получаем внутреннюю ошибку сервера 500. Журнал apache выдает мне следующее сообщение
Преждевременное завершение заголовков скрипта: socialmarketingplatform.wsgi, referer:
Когда я раскомментирую строку, в которой используется модуль scrypt, все работает нормально. Также, когда я запускаю сервер, поставляемый с Django, с включенным scrypt, все работает на реальном сервере. Таким образом, ошибка генерируется комбинацией mod_wsgi, django и scrypt.
Я использую следующий файл wsgi:
import os
import sys
path = '/var/www/vhosts/[sub_domain]'
if path not in sys.path:
sys.path.append(path)
sys.path.append(path '/socialmarketingplatform')
os.environ['DJANGO_SETTINGS_MODULE'] = 'socialmarketingplatform.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
И следующая конфигурация virtualhost:
<VirtualHost *:80>
#Basic setup
ServerAdmin [removed email]
ServerName luxdevelopment.net
ServerAlias [sub domain]
DocumentRoot /var/www/vhosts/[sub domain]/socialmarketingplatform/
Alias /media/admin /usr/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/contrib/admin/media
Alias /media /var/www/vhosts/[sub domain]/socialmarketingplatform/media
<Location media="">
SetHandler None
</Location>
LogLevel warn
ErrorLog /var/log/httpd/smp_error.log
CustomLog /var/log/httpd/smp_access.log combined
WSGIDaemonProcess luxdevelopment.net user=apache group=apache threads=25
WSGIProcessGroup luxdevelopment.net
WSGIScriptAlias / /var/www/cgi-bin/socialmarketingplatform.wsgi
</VirtualHost>
Я надеюсь, что кто-нибудь сможет помочь мне с этой проблемой. Если возникнут какие-либо дополнительные вопросы, дайте мне знать.
Комментарии:
1. Тьфу! Не помещайте свой код в DocumentRoot! Особенно, если вы беспокоитесь о безопасности.
2. @daniel-roseman: Вот почему мой корневой каталог документа /var / www / html /, если это еще недостаточно безопасно, что вы предлагаете? Возможно, я неправильно вас понял, я посмотрю, смогу ли я переместить исходный код за пределы этой папки. Спасибо за ваше предложение.
3. Ну, я имею в виду, что вы устанавливаете DocumentRoot в местоположение вашего кода в конфигурации vhost. Не делайте этого.
4. @daniel-roseman: хорошо, спасибо за ваше предложение, позже это изменится. Сначала я хочу исправить эту ошибку. Прежде чем я что-то перепутаю.
5. Просто любопытно, возможно, вы сами нашли решение этой проблемы, которым могли бы поделиться здесь? Я предполагаю, что проблема возникает из-за того, что SCrypt является расширением C, а не кодом Python. Возможно, есть ли ответ в списках рассылки mod_wsgi?
Ответ №1:
Смотрите:
http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions#Apache_Process_Crashes
Сообщение «преждевременное завершение заголовков скрипта» обычно указывает на сбой вашего кода в процессе daemon. Вы можете убедиться в этом, просмотрев ошибку сегментации или аналогичное сообщение в основном файле журнала ошибок Apache. Если вы включите ‘LogLevel info’ в основной конфигурации Apache и VirtualHost, mod_wsgi будет регистрировать больше информации о перезапусках процесса daemon.
Быстрое решение, если запущено только приложение в этой группе процессов-демонов, заключается в добавлении:
WSGIApplicationGroup %{GLOBAL}
Это позволит избежать сбоев, вызванных неисправными сторонними модулями расширения для Python, которые неправильно написаны для работы во вспомогательных интерпретаторах.
Кроме этого, могут быть несоответствия версий общей библиотеки, как описано в FAQ.
Комментарии:
1. Спасибо за этот комментарий, в итоге я не смог устранить проблему.