【问题标题】:Django - deployed, 403 for static but it should have permission, wsgi + ApacheDjango - 已部署,静态 403 但它应该有权限,wsgi + Apache
【发布时间】:2017-05-05 10:41:16
【问题描述】:

我部署的 Django 项目无法访问静态文件,在 Chrome 中检查时,我得到所有这些文件的 403。

我将以下内容添加到我的 000-default.conf 中,其中还有 WSGIScriptAlias 等:

Alias /static/ /home/budget/static/deploy/
<Directory /home/budget/static/deploy>
Required all granted
</Directory/

静态文件存在于budget/static/deploy 文件夹中。这不应该提供所需的权限吗?我必须改变什么才能摆脱 403?

它在 Ubuntu 16.04 上运行。

编辑:

settings.py:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    #os.path.join(BASE_DIR, 'budget/static'),
    os.path.join(BASE_DIR, "static"),
    )

STATIC_ROOT = os.path.join(BASE_DIR, "static/deploy/")

【问题讨论】:

    标签: python django apache


    【解决方案1】:

    可能有几个不同的原因导致您的配置无法正常工作。首先,我会确保您确实在修改正确的 Apache 配置文件。你可以运行这个命令来检查这个:

    /usr/sbin/apachectl -V | grep SERVER_CONFIG_FILE | awk '{split($0,a,"="); print a[2]}' | sed s/\"//g
    

    然后,要通过 WSGI 将其他 API 请求委托给 django,您还应该为您的 wsgi 文件提供正确的权限(也许这对于单纯的静态服务工作并不是绝对必要的):

    <Directory /path/to/django/project/project>
       <Files wsgi.py>
           Require all granted
       </Files>
    </Directory>
    

    接下来,设置 Apache 使用的进程信息以及项目的绑定 url。

    WSGIDaemonProcess myproject python-path=/path/to/django/project python-home=/path/to/your/venv
    WSGIProcessGroup mydjangoproject
    WSGIScriptAlias /binding/url /path/to/django/project/project/wsgi.py
    

    最后,您可能需要设置一些权限以允许 www-data 读取您的媒体和静态文件,您应该已准备就绪。不要忘记重新启动 Apache 以应用修改。

    【讨论】:

    • 您好,谢谢。我有一个像你一样的 wsgi.py 的 sn-p (但带有我的项目的路径),所以配置文件应该是正确的。我添加了您提供的 WSGIDaemonProcess 行,但这并没有改变。最后,我给了 www-data 所有权,如下所示:sudo chown -R www-data:www-data deploy(对于每个文件夹,我不确定是否有必要)并重新启动 Apache,但没有任何改变。
    • 什么是给你 403 的 url?您是否检查过您是否编辑了正确的配置文件?
    • 您可以授予sudo chmod -R 775 /home/budget/static/deploy的权限
    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多