AWS部署Hasura REST API返回404 Cannot GET /api/rest/*排查

调用接口返回的错误响应:
{ "statusCode": 404, "message": "Cannot GET /api/rest/get-profile-photo" }
问题排查与解决方案
首先明确:这个错误响应格式是NestJS框架默认的404返回结构,不是Hasura抛出的错误,说明请求根本没到达Hasura的REST接口处理逻辑,按优先级从高到低排查即可:
- 优先排查NestJS层路由/代理配置
如果你架构里是请求先到NestJS再转发给Hasura,先检查NestJS的全局路由前缀、代理中间件规则:大概率是没有配置/api/rest/**路径的转发规则,NestJS在自身路由表里找不到匹配接口,直接返回了默认404。给对应路径配置正确的反向代理,指向Fargate内网中的Hasura服务地址即可。 - 其次排查API Gateway路径转发规则
如果请求链路是API网关直接转Fargate服务,检查API Gateway的集成配置:- 不要开启多余的路径覆盖,确保请求路径
/api/rest/get-profile-photo被完整透传到后端服务 - 如果API网关配置了路由前缀(比如用
/hasura/*路由匹配Hasura相关请求),要配置路径重写规则,把多余的前缀(比如/hasura)剔除后再转发给后端,避免路径不匹配
- 不要开启多余的路径覆盖,确保请求路径
- 再排查Hasura线上元数据同步问题
跳过API网关、NestJS,直接在VPC内调用Fargate上部署的Hasura实例地址,访问对应REST接口,如果仍然返回404,说明线上Hasura没有同步本地的REST端点配置:进入线上Hasura控制台,重新导入元数据,确认REST端点列表中存在/api/rest/get-profile-photo接口,且请求方法配置为GET。 - 最后排查负载均衡/安全组路由
如果Fargate前配置了ALB,检查ALB的转发规则,确认/api/*路径的请求被转发到Hasura服务对应的目标组端口,不要错转到NestJS服务的端口(如果两个服务独立部署)。
内容的提问来源于stack exchange,提问作者PS95
相关产品推荐
相关产品推荐

