当前位置: 首页 > 知识库问答 >
问题:

Apache 在部署 Django 项目时mod_wsgi抛出错误“403 禁止访问”

宇文峰
2023-03-14

最近,我一直试图在CentOS服务器上使用< code>mod_wsgi部署django站点,但到目前为止,当我试图通过我的笔记本电脑访问Django站点时,网页只显示< code >错误:403禁止您没有权限在此服务器上访问/

除了阅读所有显而易见的文档之外,我还研究了前面的这些问题:

  • Django mod_wsgi Apache = 403 禁止
  • 错误消息“禁止您无权访问 / 在此服务器上”
  • 禁止 您无权访问 / 在此服务器上
  • Apache mod_wsgi错误:禁止 您无权访问 / 在此服务器上
  • Django on apache with mod_wsgi (Linux) - 403 禁止

环境:

  • 盛度 6.5
  • 蟒蛇 2.6
  • 姜戈 1.6

我正在运行以下版本的apache:

# apachectl -V  
Server version: Apache/2.2.15 (Unix)  
Server built:   Apr  3 2014 23:56:16  
Server's Module Magic Number: 20051115:25  
Server loaded:  APR 1.3.9, APR-Util 1.3.9  
Compiled using: APR 1.3.9, APR-Util 1.3.9  
Architecture:   64-bit  
Server MPM:     Prefork  
threaded:     no  
forked:     yes (variable process count)

我使用Yum安装了< code>mod_wsgi,并确认它已安装在服务器上:

# httpd -M | grep wsgi 
wsgi_module (shared)
Syntax OK

我的httpd.conf wsgi配置片段如下:

#
# Add WSGI configuration
# 

WSGIScriptAlias / /usr/local/django/basic/basic/apache/wsgi.py
WSGIPythonPath /usr/local/django/basic/
WSGIDaemonProcess ###.###.###.###
WSGIProcessGroup ###.###.###.###

<Directory /usr/local/django/basic/basic/apache>
    <Files wsgi.py>
        Options FollowSymLinks
        Order deny,allow
        Allow from all
    </Files>
</Directory>

最后我的wsgi.py脚本是:

"""
WSGI config for basic project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
"""

import os
import sys

path = "/usr/local/django/basic/basic/apache"
if path not in sys.path:
     sys.path.append(path)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "basic.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

错误日志的输出:

[Fri Oct 24 14:10:43 2014] [error] [client (redacted)] Symbolic link not allowed or link target not accessible: /usr/local/django/basic  
[Fri Oct 24 14:11:25 2014] [error] [client (redacted)] Symbolic link not allowed or link target not accessible: /usr/local/django/basic  
[Fri Oct 24 14:14:02 2014] [error] [client (redacted)] Symbolic link not allowed or link target not accessible: /usr/local/django/basic  

笔记:

    < Li > django项目位于我的用户的主目录中,但在`/usr/local/django/中有一个指向它的符号链接 < li >过去,当我处理项目时,错误403通常意味着对文件的权限是错误的,但我已经检查过,这些文件应该都允许apache用户访问它们 < li >当我注释掉Apache配置的wsgi相关行时,我的web服务器工作正常。

共有2个答案

满言
2023-03-14

可能你忘记设置DocumentRoot了。你应该让DocumentRoot可以被apache用户读写。就像这样做:

sudo chown -R www_default:www_default /path/to/you/DocumentRoot

你也可以这样做:

sudo chmod -R 755 /path/to/your/DocumentRoot
笪德华
2023-03-14

抱歉,我发这个有点晚了。这是对我的apache配置的最终修复,最终成功了。

WSGIScriptAlias /basic /var/www/django/basic/basic/wsgi.py
WSGIPythonPath /var/www/django/basic/

<Directory /var/www/django/basic/basic>
    Options FollowSymLinks
    <Files wsgi.py>
        Order allow,deny
        Allow from all
    </Files>
</Directory>

Alias /static /var/www/django/basic/basic/static

这是我的wsgi.py文件在python中的最终版本。这里的关键代码行是< code>PYTHON_EGG_CACHE。该变量默认设置为一个不存在的目录。我将它设置为< code>/tmp/。python-eggs确保< code >。python-eggs拥有apache用户对它的读/写权限,无论您将该文件放在哪里。

"""
WSGI config for basic project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
"""

import os
import sys

path = "/usr/local/django/basic/basic/apache"
    if path not in sys.path:
        sys.path.append(path)

os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "basic.settings")

#print os.getenv("DJANGO_SETTINGS_MODULE")
#print os.getenv("PYTHON_EGG_CACHE")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

旁注:

  • 一个友好的提醒,确保您的django应用程序中的每个文件都是apache用户可读的(如果需要,还可以写)。Git有一次将一个文件覆盖到我曾经设置过的旧权限,我花了一点时间才发现权限发生了变化,但我并没有意识到这一点
 类似资料:
  • 问题内容: 我在主目录中创建了Django项目,因此它位于主目录中。 设定 Contents of Contect of Error in Contents of Permissions of Permissions of Permissions of 我在浏览器上遇到错误 请帮助我进行配置。 编辑 目前,我正在通过改变前进 至 因此,这肯定与文件配置有关,但我担心的是,我在该文件中仅添加了5行,

  • 问题内容: 有人可以解释守护程序模式下的apache mod_wsgi和线程模式下的django fastcgi之间的区别。我认为它们都使用线程进行并发。 假设我将nginx用作Apache mod_wsgi的前端。 更新: 我正在比较在fastemon中内置的django(./manage.py method = threaded maxchildren = 15)和mod_wsgi在“守护程序

  • 问题内容: 我正在尝试将jQuery集成到我使用Django框架制作的Web应用程序中。但是,我很难打电话给上班族。我的模板文件包含处理ajax调用的html和javascript形式,如下所示: 我应该处理的ajax调用看起来像: 我试图遵循有关跨站点请求伪造保护的官方文档,并且还研究了解决类似问题的一些stackoverflow问题。我已经将包含在我的模板文件中,但是它似乎仍然无法正常工作。我

  • 问题内容: 我制作了供个人使用的python脚本,但不适用于Wikipedia … 这项工作: 这不起作用: 这是错误: 问题答案: 在当前代码内: Python 2.X 的Python 3.X 带有Selenium的Python 3.X(执行Javascript函数) 修改后的版本起作用的原因是因为Wikipedia检查User-Agent是“流行的浏览器”

  • 问题内容: 我有以下代码: 但是,它引发此错误: 谁能告诉我为什么会这样吗? 问题答案: 我相信这是因为相对的路径。“ ../”被认为是恶意的。首先解析本地路径,然后调用。您可以事先解析路径。

  • 我有这个代码: 但是,它会抛出以下错误: 有人能告诉我为什么会这样吗?