403 禁止:Nginx 不在 Django 管理面板中提供静态信息

use*_*682 2 css python django nginx django-admin

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'adminstatic')
Run Code Online (Sandbox Code Playgroud)

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
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

PS:我将 uWsgi 与 nginx 一起使用。

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

dge*_*gel 6

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

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