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

Docker+Nginx反向代理部署Django时静态文件404问题排查

Docker+Django+Nginx部署:静态文件404错误排查

我在EC2上通过Docker部署Django项目,使用Nginx作为反向代理,目前已能通过自定义HTTPS域名正常访问项目,但静态文件始终返回404错误。相关配置细节如下:

  • Nginx模板文件default-ssl.conf.tpl中的静态文件路由配置:
location /static{
    alias /vol/static;
}
  • Nginx的Dockerfile已声明卷:
VOLUME /vol/static
VOLUME /vol/www 

我已手动通过docker cp将静态文件放入Nginx容器的/vol/static目录,并且通过docker exec进入容器确认文件确实存在,但访问https://tgmjack.com/static/health_hud.png仍返回404。

可能的问题点

  • 路径匹配不一致:location /static和alias /vol/static的斜杠匹配问题。如果alias路径末尾没有斜杠,而请求的URL是/static/health_hud.png,Nginx会拼接成/vol/statichealth_hud.png,导致路径错误。建议修改为location /static/(带末尾斜杠),同时alias /vol/static/(带末尾斜杠)。
  • 文件权限不足:Nginx进程通常以www-data用户运行,检查/vol/static目录及文件的权限是否允许该用户读取。可通过ls -l /vol/static查看权限,必要时执行chown -R www-data:www-data /vol/static或chmod -R 755 /vol/static调整权限。
  • Docker卷挂载异常:虽然Dockerfile声明了VOLUME /vol/static,但容器启动时可能未正确挂载该卷,导致你手动复制的文件并未被Nginx实际读取。通过docker inspect <nginx-container-id>查看Mounts字段,确认/vol/static对应的宿主机路径或卷信息是否正确。
  • Nginx配置未生效:修改default-ssl.conf.tpl后,是否重新加载了Nginx配置?需进入容器执行nginx -s reload,或重启Nginx容器使新配置生效。
  • Django静态文件收集不完整:确认你复制的静态文件是通过python manage.py collectstatic命令收集到STATIC_ROOT下的完整文件,若文件结构缺失或路径错误,也会导致访问失败。

需要补充的信息

  • Nginx容器的启动命令或docker-compose.yml配置,确认卷的挂载方式。
  • Nginx容器内实际生效的配置文件内容(如/etc/nginx/conf.d/default-ssl.conf),验证模板生成后的配置是否符合预期。
  • docker inspect <nginx-container-id>输出中/vol/static的挂载详情。
  • Nginx的错误日志内容(可通过docker logs <nginx-container-id>或容器内/var/log/nginx/error.log查看),日志会明确记录404的具体原因。
  • Django项目settings.py中的STATIC_ROOT和STATIC_URL配置内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:45:27