You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

重启后Django-Nginx配置无法加载静态文件求助

解决Django-Nginx重启后静态文件404的问题

这个问题我碰到过好多次,核心原因是你的Nginx静态文件路由配置和Django的STATIC_URL不匹配,再加上服务器重启后可能静态文件收集或权限出了小问题。咱们一步步来修复:

1. 修正Nginx的静态文件路由配置

你Django设置里的STATIC_URL/static/,但Nginx配置里写的是location /source/static——这就导致浏览器请求/static/styles.css时,Nginx根本没匹配到这个规则,直接把请求转发给了Gunicorn,而Gunicorn是不处理静态文件的,自然就返回404了。

打开你的Nginx站点配置文件Sites-Available/site.mywebsite.com,修改静态文件的location规则:

server{ 
    listen 80; 
    server_name site.mywebsite.com; 
    location /static/ { 
        alias /home/elspeth/sites/site.mywebsite.com/static/; 
        # 生产环境建议关掉autoindex,避免暴露目录结构
        # autoindex on; 
    } 
    location / { 
        proxy_pass http://unix:/tmp/site.mywebsite.com.socket; 
        proxy_set_header Host $host; 
    } 
}

2. 重新收集静态文件

服务器重启后,有可能之前的静态文件收集状态出了问题(比如虚拟环境路径变化、文件权限重置),咱们重新执行Django的静态文件收集命令:

# 进入项目源码目录
cd /home/elspeth/sites/site.mywebsite.com/source
# 激活虚拟环境
source ../virtualenv/bin/activate
# 收集静态文件到STATIC_ROOT目录
python manage.py collectstatic --noinput

这个命令会把source/staticblog应用里的静态文件,还有Django admin的静态文件全部复制到../static目录(也就是你配置的STATIC_ROOT),确保目标目录里有你需要的css/styles.cssbootstrap-4.3.1-dist这些文件。

3. 修复静态文件目录的权限

Nginx进程默认是以www-data用户运行的,如果静态文件目录的权限不对,Nginx就没法读取这些文件。执行以下命令修正权限:

# 把静态文件目录的所有者改成www-data
sudo chown -R www-data:www-data /home/elspeth/sites/site.mywebsite.com/static
# 设置目录和文件的可读权限
sudo chmod -R 755 /home/elspeth/sites/site.mywebsite.com/static

4. 重启Nginx和Gunicorn服务

修改配置后必须重启服务才能生效:

# 重启Nginx
sudo systemctl restart nginx
# 重启Gunicorn(假设你用systemd管理Gunicorn,服务名根据你的实际情况调整)
sudo systemctl restart gunicorn-site.mywebsite.com

如果你的Gunicorn是用Supervisor或者其他工具管理的,记得对应重启相关进程。

额外排查技巧

如果还是有问题,你可以:

  • 直接访问静态文件的URL(比如http://site.mywebsite.com/static/styles.css),看返回的具体错误
  • 查看Nginx的错误日志/var/log/nginx/error.log,里面会记录路径不存在、权限不足等具体问题,帮你快速定位。

内容的提问来源于stack exchange,提问作者RyantheBard

火山引擎 最新活动