Apollo v3生产模式下禁用playground及/graphql访问问题咨询
Apollo v3 生产环境禁用Playground配置说明
- 你当前使用的
ApolloServerPluginLandingPageDisabled插件配置是正确的,Apollo v3 已经移除了顶级的playground配置项,所有可视化落地页(包含Playground)的控制都通过插件实现,你已经成功禁用了Playground可视化界面。 - 你访问
/graphql得到的GET query missing响应不是Playground界面,是Apollo Server默认对无查询参数的GET请求的标准响应,属于GraphQL接口的正常返回,不属于禁用失效的情况。
彻底屏蔽GET请求访问/graphql路径的方案
如果需要完全避免普通用户访问/graphql路径时得到任何返回内容,可以选择以下两种方案:
方案1:仅允许POST请求调用GraphQL接口
在注册Apollo Server handler时增加allowedHttpMethods配置,直接拒绝所有GET请求:
server.start().then(() => { app.register(server.createHandler({ path: "/graphql", cors: corsOptions, // 仅允许POST请求访问GraphQL接口 allowedHttpMethods: ['POST'] })); // 原有listen逻辑保持不变 });
配置后GET请求访问/graphql会直接返回405 Method Not Allowed错误。
方案2:生产环境拦截无查询参数的GET请求
如果需要保留GET请求执行查询的能力,可以增加Fastify前置钩子,拦截无query参数的请求:
if (env === "production") { app.addHook("preHandler", async (request, reply) => { if (request.url === "/graphql" && request.method === "GET") { const query = (request.query as Record<string, any>)?.query; if (!query) { // 可根据需求返回404或者跳转到前端首页 reply.code(404).send(); // 跳转示例:reply.redirect("/") } } }); }
内容的提问来源于stack exchange,提问作者Mj Ebrahimzadeh
相关产品推荐
相关产品推荐

