django、apache、mod_wsgi与python py-scrypt无法一起工作

1 投票
1 回答
554 浏览
提问于 2025-04-16 15:07

我正在运行一个EC2实例,用来托管一些Django网站。这些网站是通过Apache服务器和mod_wsgi模块来提供服务的。

最近几天,我一直在尝试部署一个我们正在开发的新网络平台,但遇到了一个我觉得几乎无法解决的问题。出于安全考虑,我们使用scrypt 0.4来保护用户的个人信息,比如密码。

在开发服务器上,一切都运行得很好,但当我们部署到实际服务器时,却出现了500内部服务器错误。Apache的日志给了我以下信息:

脚本头部提前结束:socialmarketingplatform.wsgi,引用来源:

当我取消注释使用scrypt模块的那一行时,一切都正常。此外,当我在启用了scrypt的Django自带服务器上运行时,实际服务器也能正常工作。所以这个错误是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 *: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 个回答

0

请看:

http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions#Apache_Process_Crashes

出现“premature end of script headers”(脚本头部提前结束)的消息,通常意味着你的代码让后台进程崩溃了。你可以通过查看主Apache错误日志文件,找找有没有“段错误”或者类似的消息来确认这一点。如果你在主Apache配置和虚拟主机中启用“LogLevel info”,那么mod_wsgi会记录更多关于后台进程重启的信息。

如果你只在这个后台进程组中运行一个应用程序,可以快速解决这个问题,方法是添加:

WSGIApplicationGroup %{GLOBAL}

这样可以避免因为一些第三方扩展模块不兼容而导致的崩溃,这些模块没有正确编写以适应子解释器。

除此之外,FAQ中提到的共享库版本不匹配也可能是问题所在。

撰写回答