我正在尝试使用 mod_wsgi 使我的 django 项目与httpd一起使用。但我一直得到一个" 500内部服务器错误"。我正在使用 PostgreSQL Postgis 数据库。我的操作系统是Fedora 20。
真正奇怪的是:
当我使用除Postgis 之外的其他内容时,它也正常工作,即当我替换 settings.py 文件中的followig行时:
'ENGINE': 'django.contrib.gis.db.backends.postgis',
由任何其他数据库(mysql,sqlite3 ..),例如:
'ENGINE': 'django.db.backends.mysql',
这是django项目的httpd配置文件(让我们称之为testproject
)(我把这个文件放在/etc/httpd/conf.d
中):
<VirtualHost *:80>
ServerName testproject.com
DocumentRoot /var/www/testproject
WSGIProcessGroup testproject
WSGIDaemonProcess testproject threads=4
WSGIScriptAlias / /var/www/testproject/django.wsgi
Alias /static/ "/var/www/testproject/static/"
<Location "/media">
SetHandler None
</Location>
<LocationMatch "\.(jpg|gif|png|js|css)$">
SetHandler None
</LocationMatch>
<Directory /var/www/testproject>
WSGIProcessGroup testproject
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
项目设置(settings.py
)显然产生错误的部分:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
当我尝试访问网址testproject.com
时,我收到了#34; 500内部服务器错误&#34;,httpd错误日志如下:
[Mon May 12 14:34:35.462830 2014] [:info] [pid 20762] [remote 127.0.0.1:33403] mod_wsgi (pid=20762, process='testproject', application=''): Loading WSGI script '/var/www/testproject/django.wsgi'.
[Mon May 12 14:34:35.799954 2014] [core:error] [pid 20537] [client 127.0.0.1:49565] End of script output before headers: django.wsgi
[Mon May 12 14:34:35.884215 2014] [core:notice] [pid 20530] AH00052: child pid 20762 exit signal Segmentation fault (11)
[Mon May 12 14:34:35.884237 2014] [:info] [pid 20530] mod_wsgi (pid=20762): Process 'testproject' has died, restarting.
[Mon May 12 14:34:35.884240 2014] [:info] [pid 20530] mod_wsgi (pid=20762): Process 'testproject' terminated by signal 11
[Mon May 12 14:34:35.884728 2014] [:info] [pid 20978] mod_wsgi (pid=20978): Starting process 'testproject' with uid=48, gid=48 and threads=4.
[Mon May 12 14:34:35.884981 2014] [:info] [pid 20978] mod_wsgi (pid=20978): Initializing Python.
[Mon May 12 14:34:35.892051 2014] [:info] [pid 20978] mod_wsgi (pid=20978): Attach interpreter ''
我坚持认为此错误仅在使用django.contrib.gis.db.backends.postgis
时发生,但使用django.db.backends.*
中的任何一个都可以正常工作。
非常感谢任何帮助或想法。
答案 0 :(得分:0)
我刚刚发现了问题所在。它来自 SELinux政策,显然是否认httpd访问该页面的权限。
我在/var/log/httpd/error_log
以下一行:
[Mon May 12 14:04:34.876392 2014] [core:notice] [pid 20070] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
然后我运行了以下两个命令行:
sudo grep httpd /var/log/audit/audit.log | audit2allow -M mypol
sudo semodule -i mypol.pp
它再次起作用。