gpt4 book ai didi

django - 带有 Django 应用程序的 Apache 服务器上的 403 错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:07 24 4
gpt4 key购买 nike

我一直在整个站点中搜索解决方案,但一直找不到。我有一台装有 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。我在 /srv 目录上运行了 ls -l,它的所有者和组被列为 root。因此,我运行了 sudo chown -R apache:apache/srv/mysite 更改了目录和所有子目录以使用 apache 作为所有者和组。

但是,无论我谷歌或尝试多少,我都无法克服这个 403 错误。

编辑:

我发现当我禁用 SELinux 时,http.conf 文件中的 WSGIPythonPath 变量是 django.wsgi,它导致 500 内部服务器错误。但是,当我将其更改为 wsgi.py 时,我的网站可以正常显示。我很好奇为什么会这样。

无论如何,因为这将是一台生产机器,我更愿意保持 SELinux 并弄清楚如何获得适当的权限。

编辑 2:

我已经编辑了我的 django.wsgi 文件(在上面更改)ala this link

编辑 3:

我尝试将我的项目文件移动到我的/home/文件夹中。我一直在尝试 django.wsgiwsgi.py 之间交替,但仍然无法通过 403 Forbidden 错误。我认为这最初是 /srv 目录的权限问题,但事实并非如此……我正在尝试解决这个问题,但没有任何效果。

编辑 4:

我决定暂时保留开发服务器...但我仍然需要让它正常工作,而且我已经筋疲力尽了。有没有人可以帮助我?

最佳答案

SELinux 有自己的访问权限系统。根据 SELinux 上下文,您的进程必须被授予访问文件系统上文件的权限。 SELinux 中定义了一些默认策略和上下文,它们对安装的默认情况很有用。只有 Web 文件应该位于“/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。为您的目录制作默认标签

通过“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 访问的目录。


在 RedHat 上阅读更多内容: https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext.html

Fedora SELinux 文档: http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/

关于django - 带有 Django 应用程序的 Apache 服务器上的 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com