You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django+Nginx遇静态资源404问题求助

Django + Docker + Nginx 静态资源404问题排查方案

1. 确认Django静态资源收集配置与执行

  • 检查settings.py核心配置:
    DEBUG = False  # 生产环境必须关闭,否则Django会自行处理静态资源,不符合生产规范
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')  # 静态文件统一收集目录
    # 若有自定义静态目录,需添加到STATICFILES_DIRS
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    
  • 确保Django容器启动时执行了collectstatic命令,比如在entrypoint.sh中添加:
    python manage.py collectstatic --noinput
    
    这一步会把所有app的静态文件归集到STATIC_ROOT目录,是Nginx能访问到静态资源的核心前提。

2. 修正Docker Compose的目录挂载配置

不要手动复制静态文件夹到Nginx容器,用Docker共享卷挂载更稳定可靠:

services:
  django:
    build: .
    volumes:
      - static_volume:/app/staticfiles  # 将Django的STATIC_ROOT挂载到共享卷
  nginx:
    image: nginx:alpine
    volumes:
      - static_volume:/usr/share/nginx/html/static  # 共享卷挂载到Nginx的静态资源目录
      - ./nginx/conf.d:/etc/nginx/conf.d  # 挂载自定义Nginx配置
    ports:
      - "80:80"
volumes:
  static_volume:  # 定义共享卷

3. 检查Nginx静态资源路由配置

确保Nginx的server块里正确匹配/static/请求:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://django:8000;  # 转发动态请求到Django容器
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static/ {
        root /usr/share/nginx/html;  # 注意这里是static目录的上级路径
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
    }
}

如果使用alias,路径要写成/usr/share/nginx/html/static/,两种配置方式不要混淆。

4. 验证文件权限与存在性

  • 进入Nginx容器,检查静态文件是否存在:
    docker exec -it <nginx-container-name> ls /usr/share/nginx/html/static/frontend
    
    若文件不存在,回到Django容器检查collectstatic是否执行成功,以及STATIC_ROOT路径是否正确。
  • 确保静态文件权限允许Nginx读取,可在Django的entrypoint.sh添加:
    chmod -R 755 /app/staticfiles
    

5. 排查浏览器缓存问题

有时候浏览器会缓存旧的请求路径,可按Ctrl+Shift+R强制刷新页面,或检查网络请求的实际路径是否与配置一致。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:01:15