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



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

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

附言:我正在使用uSgi和nginx。

和往常一样,我已经看了一些SO线程和博客。但这对我没有帮助。

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

你需要把你的项目移到nginx进程有权读取的文件夹中(你真的不应该从/root中提供这些东西(,或者你可以适当地使用chown/chmod/root/proj/myapp/adminstatic/来访问www-data

我将静态文件移动到/data/www,它就工作了。

将您的项目移动到/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

最新更新