我一直在寻找这个网站的解决方案,但一直找不到。我有一个带有Apache 2.2.15,Django 1.6和mod_wsgi 3.2的CentOS 6.4服务器。我使用Apache显示静态文件和mod_wsgi来显示Django内容。
由于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
。我在ls -l
目录上运行了/srv
,其所有者和组列为root
。因此,我运行了sudo chown -R apache:apache /srv/mysite
,它将目录和所有子目录更改为使用apache
作为所有者和组。
然而,无论我谷歌或尝试多少,我都无法克服403错误。
编辑:
我发现当我禁用SELinux并且WSGIPythonPath
文件中的http.conf
变量为django.wsgi
时,会导致500内部服务器错误。但是,当我将其更改为wsgi.py
时,我的网站会正常显示。我很好奇为什么会这样。
在任何情况下,由于这将是一台生产机器,我更喜欢保持SELinux,并找出如何获得适当的权限。
编辑2:
我已编辑了django.wsgi
文件(上面已更改)ala this link
编辑3:
我尝试将项目文件移动到my / home /文件夹中。我一直在尝试django.wsgi
和wsgi.py
之间交替,但仍然无法通过403 Forbidden错误。我认为它最初是/srv
目录的权限问题,但似乎并非如此......我试图解决这个问题,但没有任何工作。
编辑4:
我决定暂时坚持开发服务器......但是我仍然需要让它工作,我就在我的绳索的最后。那里有人可以帮助我吗?
答案 0 :(得分:4)
SELinux拥有自己的授予访问权限的系统。必须根据SELinux上下文授予您访问文件系统文件的进程权限。在SELinux中定义了一些默认的政治和上下文,它们对于您的安装的默认情况很有用。只是网络文件应该在'/ var / www'中。您可以使用开关'-Z'检查文件或进程的当前上下文,请参阅
[root@localhost]# ls -Z /var
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 www
检查/ srv / mysite的上下文
[root@localhost]# ls -Z /srv
drwxr-xr-x. root root system_u:object_r:var_t:s0 mysite
允许Apache HTTPD服务器使用SELinux类型httpd_sys_content_t访问文件,不允许使用SELinux类型var_t访问文件。
<强> 1。更改目录的SELinux类型并检查上下文
[root@localhost]# chcon -R -t httpd_sys_content_t /srv/mysite
[root@localhost]# ls -Z /srv
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 mysite
检查您的网站目前是否正常运作。
到目前为止还没有完成,当您将文件系统重新标记为默认值时,或者如果您使用守护程序检查或重新标记自身,则可能会丢失新标签。
<强> 2。为您的目录制作默认的labaling
通过'semange'创建默认标签,并通过'restorecon'
将其应用于您的目录[root@localhost]# semanage fcontext -a -t httpd_sys_content_t /srv/mysite
[root@localhost]# restorecon -v -R /srv/mysite
[root@localhost]# ls -Z /srv
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 mysite
目前您的SELinux标签已修复。
注意:正则表达式可以定义默认上下文。
Debian:我不是Debian用户,所以SELinux类型可能有点不同,原理是一样的,检查apache目录的SELinux类型并将其设置在你的您希望从apache访问的目录。
Fedora SELinux文档: http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/