![](/img/trans.png)
[英]Django/Nginx - Error 403 Forbidden when serving media files over some size
[英]403 Forbidden: Nginx not serving statics in Django Admin panel
设置.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
你可以确定我在sites-enabled文件夹中只有这个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
的文件夹。 这个 admin 文件夹有 3 个文件夹,名为css
、 img
、 js
。
所有这些都是我在生产机器上做的。 因此,当我尝试通过生产的 ip 访问本地浏览器上的 django 管理页面时,管理面板正在打开但加载了任何 css/js。 我做了 F12 并在网络选项卡中看到。 所有静态都存在禁止错误。
PS:我将 uWsgi 与 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
上编辑您的配置/etc/nginx/sites-available/your-project.conf
到新位置。
然后运行
sudo systemctl daemon-reload,
sudo systemctl restart gunicorn,
sudo systemctl restart nginx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.