部署Apollo v3到AWS EC2实例出现无法连接服务器报错如何解决?
错误说明
无法连接到服务器:从运行在HTTPS协议上的Studio向你的HTTP端点发送网络请求的操作不安全,因此我们无法对你的端点执行自检操作。
触发原因
Apollo Studio本身运行在HTTPS环境下,浏览器默认安全策略禁止HTTPS页面主动向未加密的HTTP端点发起跨协议请求,导致自检流程被拦截。
解决方案
方案1:直接为Apollo Server配置HTTPS(生产环境首选)
- 提前将自定义域名解析到EC2实例的公网IP,同时在EC2安全组中开放80、443端口的入站规则。
- 安装certbot工具申请免费Let's Encrypt SSL证书,执行命令:
sudo certbot certonly --standalone -d 你的实际域名
按照命令行提示完成证书申请流程。 - 修改Apollo Server启动代码,加载SSL证书启动HTTPS服务,Node.js环境示例代码:
const { ApolloServer } = require('@apollo/server'); const { expressMiddleware } = require('@apollo/server/express4'); const express = require('express'); const https = require('https'); const fs = require('fs'); async function startServer() { const server = new ApolloServer({ typeDefs, resolvers, introspection: true // 生产环境按需开启 }); await server.start(); const app = express(); app.use(express.json()); app.use('/graphql', expressMiddleware(server)); // 加载SSL证书启动HTTPS服务 https.createServer({ key: fs.readFileSync('/etc/letsencrypt/live/你的实际域名/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/你的实际域名/fullchain.pem') }, app).listen(443, () => { console.log('Apollo Server 运行在 https://你的实际域名/graphql'); }); } startServer();
- 配置完成后将HTTPS域名端点填写到Apollo Studio即可完成自检。
方案2:通过Nginx反向代理配置HTTPS
无需修改Apollo Server代码,适合同一EC2上运行多个服务的场景:
- 同方案1第一步完成域名解析、端口开放和SSL证书申请。
- 安装Nginx后编辑站点配置文件,添加反向代理规则,将HTTPS请求转发到本地运行的Apollo Server HTTP端口,示例配置:
server { listen 443 ssl; server_name 你的实际域名; ssl_certificate /etc/letsencrypt/live/你的实际域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的实际域名/privkey.pem; location /graphql { proxy_pass http://localhost:4000; # 替换为Apollo Server本地运行端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
- 执行
nginx -s reload重启Nginx生效配置,使用HTTPS域名端点即可对接Apollo Studio。
方案3:临时测试替代方案(仅适用于开发调试)
不需要域名和SSL证书即可完成调试:
- 开启Apollo Server自带Playground:在Apollo Server配置中添加
introspection: true、playground: true参数,部署完成后直接访问EC2公网IP加端口的HTTP地址,即可打开本地Playground调试,无需使用线上Apollo Studio。 - 隧道工具映射HTTPS端点:在EC2中安装ngrok后执行命令
ngrok http 4000(将4000替换为Apollo Server实际运行端口),复制工具生成的HTTPS前缀的公网地址,填写到Apollo Studio即可完成自检。 - 临时放行浏览器不安全请求:在Chrome浏览器的Apollo Studio站点设置中,将「不安全内容」权限设置为允许,即可临时绕过跨协议请求限制,该方法存在安全风险,仅可用于临时测试。
内容的提问来源于stack exchange,提问作者Enis Yıldız
相关产品推荐
相关产品推荐

