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

生产服务器中GraphQL连接被拒绝问题求助

问题解决步骤

1. 修复客户端API调用地址错误

你客户端硬编码的http://localhost:9000/graphql是开发环境的本地地址,生产环境下浏览器会把这个localhost解析为用户自己的本地机器,根本不会指向你的DigitalOcean服务器——这是核心问题。

  • 将客户端的API地址改为相对路径,比如/graphql,这样会自动使用当前域名发起请求;
  • 或者配置Angular的生产环境变量,在environment.prod.ts里设置apiUrl: '/graphql',打包时自动替换地址。

2. 处理端口占用问题

提示EADDRINUSE说明9000端口确实有进程在运行,先定位进程:

# 查找占用9000端口的进程ID
lsof -i :9000
# 或者用netstat命令
netstat -tulpn | grep 9000

拿到进程ID(PID)后强制终止进程:

kill -9 <PID>

之后建议用进程管理工具托管Express服务,避免终端关闭后进程终止:

# 安装pm2
npm install -g pm2
# 启动服务并设置开机自启
pm2 start server/index.js --name graphql-server
pm2 startup
pm2 save

3. 正确配置Nginx反向代理

之前修改服务器块导致客户端无法访问,大概率是静态文件路径或反向代理规则错误。以下是标准配置示例:

server {
    listen 80;
    server_name your-domain.com; # 替换为你的GoDaddy域名

    # 指向Angular客户端文件目录
    root /var/www/your-client-dist-folder; # 替换为你上传客户端文件的实际路径
    index index.html;

    # 处理Angular单页应用路由
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 反向代理GraphQL请求到本地9000端口
    location /graphql {
        proxy_pass http://localhost:9000;
        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:

nginx -t
systemctl restart nginx

额外注意事项

  • 确保DigitalOcean Droplet防火墙开放80/443端口(若启用HTTPS),9000端口无需对外暴露,Nginx会在内部完成代理;
  • 后续可配置Let's Encrypt证书启用HTTPS,避免混合内容错误;
  • 检查Express服务是否绑定0.0.0.0而非仅localhost,确保Nginx能正常访问服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:04