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

Django+GraphQL通过Nginx部署到AWS EC2后GraphQL接口404问题求助

第一步:定位问题层级

首先登录到你的EC2实例,执行以下命令直接测试Gunicorn服务是否能正常响应graphql请求:

curl -v --unix-socket /home/ubuntu/project/run.sock http://localhost/graphql
  • 如果该请求返回200且有GraphQL相关内容,说明问题出在Nginx配置层
  • 如果该请求也返回404,说明问题出在Django应用层

第二步:Django应用层问题排查(如果上述curl返回404)

  1. 检查APPEND_SLASH配置与URL匹配逻辑
    你当前的urls.py中graphql路径没有写尾斜杠,而Django默认开启APPEND_SLASH = True,当你访问带尾斜杠的/graphql/时,本来会触发自动重定向,但你最后写的re_path(r'^.*', index)会优先匹配所有未明确匹配的路径,直接返回index页面,如果index视图没有对应处理逻辑就会返回404。
    修复方案:
    修改urls.py中的graphql路径,加上尾斜杠保持统一:
path('graphql/' , jwt_cookie(csrf_exempt(GraphQLView.as_view(schema=schema, graphiql=True)))),

如果需要同时兼容带/和不带/的访问,可以调整re_path的匹配规则,或者在路径中使用可选斜杠标识。

  1. 检查ALLOWED_HOSTS配置
    确认你的Django settings.py中的ALLOWED_HOSTS已经添加了EC2的完整域名:
ALLOWED_HOSTS = ['ec2-.........compute.amazonaws.com', '127.0.0.1', 'localhost']

配置错误的话也可能导致请求被拦截返回404类错误。

  1. 检查视图返回逻辑
    确认你的index视图没有对/graphql路径做特殊拦截处理,开启Django debug模式后访问路径可以看到具体的路由匹配过程,方便快速定位问题。

第三步:Nginx层问题排查(如果curl Gunicorn返回正常)

  1. 检查proxy_params配置
    确认你的Nginx的proxy_params文件中包含了Host头的传递配置:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

如果Host头没有正确传递,Django会识别不到请求域名,导致路由匹配错误。

  1. 检查Nginx配置语法与重启状态
    执行命令验证Nginx配置是否正确:
sudo nginx -t

确认配置无误后重启Nginx生效:

sudo systemctl restart nginx

第四步:服务状态检查

  • 检查supervisor管理的Gunicorn服务状态:
sudo supervisorctl status web

如果服务状态不是RUNNING,查看gunicorn日志文件/logs/gunicorn-error.log定位启动错误。

  • 检查sock文件权限:确保Nginx进程有读取/home/ubuntu/project/run.sock的权限,权限不足也会导致请求转发失败返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:03