Docker化Django+Postgres+Nginx项目Nginx报index.html不存在错误如何解决
问题根因
你的Nginx配置仅配置了/admin、/api以及两个静态资源子路径的匹配规则,未覆盖根路径/的请求。当你访问0.0.0.0:8000时,请求没有命中任何自定义的location规则,Nginx会fallback到默认站点逻辑,到默认站点根目录/etc/nginx/html下查找index.html文件,因此触发了找不到文件的报错。
修复步骤
- 修改Nginx配置,补充根路径转发规则,同时可以合并冗余的静态资源匹配规则,修改后的
nginx.conf参考如下:
upstream django_backend { server django_app:8000; } server { listen 80; server_name localhost; # 所有非静态资源请求转发到Django location / { proxy_pass http://django_backend; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; } # 统一匹配所有静态资源请求,无需单独配置每个应用的静态路径 location /static/ { alias /usr/src/app/django_files/static/; } }
如果你确实需要限制Nginx仅转发/admin和/api路径的请求,只需在原有配置基础上额外添加根路径/的匹配规则即可。
还原端口配置(可选,避免配置混淆):
- 将
docker-compose.yml中Nginx的端口映射改回- 8000:80 - 保持
nginx.conf中listen 80;的配置不变,无需改为8000
- 将
重启服务生效:
执行以下命令重新构建启动Nginx容器:
docker-compose up -d --build nginx
补充检查项
确保Django项目的根路由urls.py中已经配置了根路径/对应的视图处理逻辑,配置完成后即可正常访问。
内容的提问来源于stack exchange,提问作者Jaco
相关产品推荐
相关产品推荐

