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

Django搭配Nginx无法加载静态文件,Gunicorn运行正常求排查

Django静态文件Nginx无法加载的遗漏配置步骤

核心问题与遗漏点:

1. Nginx静态文件路径配置错误

当前Nginx的location /static使用root指令会导致路径拼接错误:

location /static {
  root /usr/src/app/staticfiles;
}

当访问/static/css/style.css时,Nginx会尝试查找/usr/src/app/staticfiles/static/css/style.css,但collectstatic生成的文件实际存放在/usr/src/app/staticfiles/根目录下。正确应该使用alias指令:

location /static/ {
  alias /usr/src/app/staticfiles/;
}

(注意路径末尾的斜杠,避免匹配歧义)

2. Docker容器未启动Nginx服务

当前Dockerfile的CMD仅启动了Gunicorn,Nginx并未被启动。需要同时启动两个服务:

  • 方法一:使用supervisor管理进程(推荐)
    安装supervisor并配置:
    RUN apt-get install -y nginx supervisor
    COPY website/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    CMD ["supervisord", "-n"]
    
    supervisord.conf示例:
    [supervisord]
    nodaemon=true
    
    [program:gunicorn]
    command=gunicorn --bind 0.0.0.0:8000 website.wsgi:application
    directory=/usr/src/app
    user=root
    
    [program:nginx]
    command=nginx -g "daemon off;"
    
  • 方法二:使用shell脚本启动
    创建start.sh脚本:
    #!/bin/bash
    nginx -g "daemon off;" &
    gunicorn --bind 0.0.0.0:8000 website.wsgi:application
    
    在Dockerfile中添加:
    COPY start.sh /usr/src/app/start.sh
    RUN chmod +x /usr/src/app/start.sh
    CMD ["/usr/src/app/start.sh"]
    

3. Docker未暴露Nginx监听的80端口

Nginx配置监听80端口,但Dockerfile仅EXPOSE 8000,需要添加:

EXPOSE 80 8000

4. 缺失Nginx配置语法检查步骤

在Dockerfile中添加Nginx配置检查,提前发现语法错误:

RUN nginx -t

额外验证点:

  • 确认collectstatic执行后,/usr/src/app/staticfiles目录下存在完整的静态文件
  • 查看容器内Nginx日志(路径/var/log/nginx/),排查具体404错误的文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:13