我一直在搜索整个网站的解决方案,但一直没有找到。我有一个Apache 2.2.15,Django 1.6和mod_wsgi 3.2的CentOS 6.4服务器。我使用Apache来显示静态文件和mod_wsgi来显示Django内容。使用Django应用程序在Apache服务器上发生403错误
由于this page,我将Django项目文件放在/srv
目录中。
当我运行Django开发服务器时,我编写的测试页面显示正常。但是,当我启动Apache服务器并访问127.0.0.1时,出现403 Forbidden错误。
django.wsgi(在/ SRV/mysite的)
import os
import sys
envpath = '/usr/lib/python2.6/site-packages'
pwd = os.path.dirname(os.path.abspath(__file__))
os.chdir(pwd)
sys.path = [env] + sys.path
os.environ['PYTHON_EGG_CACHE'] = '/srv/mysite/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
site.addsitedir(envpath)
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandlers()
的httpd.conf
WSGIScriptAlias//srv/mysite/django.wsgi
WSGIPythonPath /srv/mysite
<more aliases and tags in order to get the right static files to show>
在httpd.conf
文件,列出的用户和组是默认apache
。我在/srv
目录上运行了ls -l
,其所有者和组被列为root
。所以,我跑sudo chown -R apache:apache /srv/mysite
它改变了目录和所有子目录使用apache
作为所有者和组。
但是,无论我有多少Google或尝试,我都无法克服这个403错误。
编辑:
我发现,当我禁用SELinux,并在http.conf
文件WSGIPythonPath
变量是django.wsgi
,它导致500内部服务器错误。但是,当我将其更改为wsgi.py
时,我的网站正常显示。我很好奇这是为什么。在任何情况下,因为这将是一台生产机器,所以我宁愿保留SELinux并找出如何获得适当的权限。
编辑2:
我已经编辑我的django.wsgi
文件(上述变更)ALA this link
编辑3:
我试图移动我的项目文件到我的/ home /文件夹。我一直在尝试django.wsgi
和wsgi.py
之间交替,但仍无法通过403 Forbidden错误。我以为它最初是一个权限问题与/srv
目录,但它似乎并非如此...我试图找出这一点,但没有任何工作。
编辑4:
我决定只坚持开发服务器现在...但我仍然需要得到这个工作,我在我的绳子结束。有没有人可以帮助我?
感谢这个答案,对不起这个答复是这么晚。我遵循你的第一步,这非常有效。然后我继续步骤2,但之后,该网站不再工作,让我回到相同的403错误。我还注意到'ls -Z/srv'的输出是'system_u:object_r'而不是'unconfined_u:object_r'。这种差异很重要吗? – noblerare
如果您使用的是目标策略(即类型强制策略),则system_u和unconfined_u SELinux用户之间没有区别,因为只检查了SELinux类型。如果步骤2不起作用,则'ls -Z/srv'的默认标签检查SELinux上下文有另一个规则,并通过'semanage fcontext -l | grep/srv'检查缺省标签。 –