![在 Djano 中,为什么浏览时会出现 500 服务器错误,但来自 SSH 的“python mysite.fcgi”可以正常工作?](https://linux22.com/image/507078/%E5%9C%A8%20Djano%20%E4%B8%AD%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B5%8F%E8%A7%88%E6%97%B6%E4%BC%9A%E5%87%BA%E7%8E%B0%20500%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%94%99%E8%AF%AF%EF%BC%8C%E4%BD%86%E6%9D%A5%E8%87%AA%20SSH%20%E7%9A%84%E2%80%9Cpython%20mysite.fcgi%E2%80%9D%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
如果我浏览我的网站,就会出现 500“内部服务器错误”。但是,如果我通过 SSH 进入我的服务器并转到我的网站文件夹并运行“python mysite.fcgi”,我会看到 HTML 呈现正常。显然,有些地方出了问题,但我不确定是什么问题。
这是我的.htaccess 文件:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(static/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
这是我的 mysite.fcgi 文件:
#!/usr/bin/python2.5
import sys, os
sys.path.insert(0, "/kunden/homepages/34/[mydir]/htdocs/projects/django")
sys.path.insert(1, "/kunden/homepages/34/[mydir]/lib/python/site-packages")
os.chdir("/kunden/homepages/34/[mydir]/htdocs/projects/django/mysite")
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "daemonize=false"])
我正在 1and1 上进行设置。这很麻烦,但我认为我已经接近目标了。
答案1
对于 CGI,500 服务器错误通常是由于 CGI 在 HTML 代码之前输出了错误的标头数据而导致的。您应该在 html 开始之前输出内容类型和两个回车符“\n”。 任何意外的输出将导致 500 错误。
我不是 Python 爱好者所以这里有一个 Perl 示例。;-)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
您可能可以在服务器日志中找到确切原因。看到 500 错误时,请务必先检查那里。
答案2
尝试:
os.environ['PYTHON_EGG_CACHE'] = '/path/to/writeable/folder'
然后对该文件夹执行 chmod 777。
如果您可以将其作为 ssh 运行,并且 apache 作为 www-data(或除您之外的某些 UID)运行,则它可能正在尝试写入 eggcache 并被拒绝权限。
答案3
AddHandler fastcgi-script .fcgi
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +FollowSymLinks +ExecCGI
</Files>
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /mysite.fcgi/$1 [QSA,L]