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

Django运行正常但curl localhost返回404错误的原因及解决方法

问题定性

该现象不能说明Nginx运行异常,恰恰能得出两个明确结论:

  1. Django本身安装、项目基础配置正常:本地runserver启动无系统检查错误,服务正常监听8000端口
  2. Nginx处于正常运行状态:curl请求返回的响应头明确由Nginx返回,说明Nginx在默认80端口正常接收请求,仅配置逻辑存在错误,未将请求正确转发到后端Django服务
标准排查步骤
  • 验证后端服务可用性:直接请求Django监听端口,执行curl -i localhost:8000,如果返回正常响应即可完全排除Django、gunicorn侧问题
  • 核查端口监听状态:执行ss -tulnp | grep -E '(nginx|gunicorn)',确认Nginx是否正常监听80/443端口、gunicorn/Django是否正常监听配置的服务端口
  • 校验Nginx配置合法性:执行nginx -t,先排除配置语法错误
  • 排查Nginx配置逻辑问题:
    • 检查/etc/nginx/nginx.conf、/etc/nginx/sites-available/下的所有站点配置,确认server块的监听端口、server_name是否和当前请求匹配
    • 检查对应server块下的location规则,确认proxy_pass配置是否指向了正确的gunicorn/Django服务地址(IP+端口或unix socket路径)
    • 排查是否存在重复server_name配置:相同的server_name会导致Nginx请求匹配优先级混乱,请求被转发到默认空server块,返回404
  • 查看Nginx错误日志定位具体问题:执行tail -f /var/log/nginx/error.log,发起请求时查看实时日志输出,可快速定位配置错误点
  • 所有配置修改完成后,执行systemctl reload nginx重载配置即可生效
本次问题解决方案

最终定位为nginx.conf中存在两条完全相同的server_name配置,删除其中一条重复配置并重载Nginx后,服务访问恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:51:02