django, apache, mod_wsgi и python py-scrypt не работают вместе

#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. Спасибо за этот комментарий, в итоге я не смог устранить проблему.