使用Netflix DGS GraphQL,如何通过AWS负载均衡器访问/graphiql?
不需要额外暴露端口,问题大概率出在路径映射、端口配置或DGS设置上,以下是具体排查方向:
路径映射不匹配
你本地访问的GraphiQL路径是/demo-graphql-app/graphiql,但通过ALB访问时如果直接用/graphiql,就会因为路径前缀缺失导致404。检查ALB的监听规则和目标组配置,确认ALB收到的请求路径是否正确转发到后端应用的/demo-graphql-app/*路径。比如,若ALB把/graphiql直接转发到目标组的/graphiql,但应用里GraphiQL的实际路径带demo-graphql-app前缀,就会找不到资源。DGS配置与应用上下文路径
查看应用的配置文件(如application.yml),确认是否设置了server.servlet.context-path=/demo-graphql-app,这会导致所有接口路径都带该前缀。同时检查DGS的GraphiQL配置项dgs.graphql.graphiql.path,确保其最终暴露的路径和ALB访问的路径一致。ALB目标组端口配置错误
你本地应用运行在8081端口,但注意到你提到出站规则是8080——出站规则是实例对外访问的端口,和ALB转发请求到实例的端口无关。检查ALB目标组的目标端口是否设置为8081(应用实际监听的端口),如果误设为8080,可能会导致部分路径无法访问(虽然你说其他API能访问,但需确认这些API是否也在8081上)。GraphiQL环境限制
检查DGS是否配置了仅在开发环境启用GraphiQL,比如dgs.graphql.graphiql.enabled=false(生产环境默认可能关闭),或者Spring Security等拦截器阻止了ALB来源的请求访问GraphiQL路径。确认生产环境的配置是否允许GraphiQL对外访问。
内容的提问来源于stack exchange,提问作者Susmitha

