【问题标题】:403 Forbidden: Nginx not serving statics in Django Admin panel403 Forbidden:Nginx 不在 Django 管理面板中提供静态数据
【发布时间】:2014-07-13 02:48:05
【问题描述】:

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'adminstatic')

mynginx.conf /etc/nginx/sites-enabled/mynginx.conf 你可以确定我在启用站点的文件夹中只有这个 conf 文件

server {
    listen                *:80;
    server_name           _;
    access_log            /var/log/myapp.access.log;
    error_log             /var/log/myapp.error.log;

    # Django media

   location /static/ {
     alias /root/proj/myapp/adminstatic/; #your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass    unix:/tmp/myapp.sock;
        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }

}

在此之后我尝试了 collectstatic 命令 python manage.py collectstatic 它已成功收集 adminstatic 文件夹中的所有静态数据。我交叉检查,在 adminstatic 文件夹中有一个名为 admin 的文件夹。这个管理文件夹有 3 个文件夹,分别命名为 cssimgjs

所有这些我都在生产机器上做。因此,当我尝试通过生产 ip 访问本地浏览器上的 django 管理页面时,管理面板正在打开,但加载了任何 css/js。我做了 F12 并在网络选项卡中看到。所有静态都存在禁止错误。

PS:我正在使用 uWsgi 和 nginx。

和往常一样,我已经看过一些 SO 主题和博客。但这对我没有帮助。

【问题讨论】:

    标签: python css django nginx django-admin


    【解决方案1】:

    nginx web 进程用户(通常为www-data)可能没有/root/proj/myapp/adminstatic/ 的读取权限。我想如果你检查你的myapp.error.log,你会看到权限被拒绝的消息。

    您需要将您的项目移动到 nginx 进程有权读取的文件夹中(您真的不应该从 /root 提供这些东西)或者您可以适当地 chown / chmod /root/proj/myapp/adminstatic/授予对www-data 的访问权限。

    【讨论】:

    • 即使您 chmod 777 -R adminstatic 的权限 /root 仍然不允许您访问这些文件 - 这就是为什么您不应该从 /root 提供这些文件。您可以通过尝试从机器上的另一个帐户读取adminstatic 来测试这一点。你会得到Permission denied
    • 要么将/root的权限修改为drwxr-xr-x(通常不是一个好主意),要么将项目从/root移出到www-data可以访问的文件夹中。
    • 我的猜测是,您可能还以 root 身份运行 uwsgi,这是一个非常糟糕的主意 - 如果有人破坏了他们已经 root 整个系统的 Web 应用程序。
    【解决方案2】:

    我将我的静态文件移动到 /data/www 并且它起作用了。

    【讨论】:

      【解决方案3】:

      将您的项目移动到/var/www/html/,然后运行sudo chown -R www-data:www-data project-directory/。记得在/etc/systemd/system/gunicorn.service/etc/nginx/sites-available/your-project.conf 上编辑您的配置,以将其移至新位置。

      然后运行

      sudo systemctl daemon-reload, 
      sudo systemctl restart gunicorn, 
      sudo systemctl restart nginx
      

      【讨论】:

        猜你喜欢
        • 2014-07-06
        • 2018-08-26
        • 2012-03-19
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 2020-10-25
        • 2017-02-21
        • 1970-01-01
        相关资源
        最近更新 更多