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

本地正常的gRPC服务部署到VPS后连接被拒绝求助

问题

本地在5000端口运行gRPC服务完全正常,但将客户端和服务端部署到VPS后,出现gRPC连接被拒绝的问题。

服务端代码

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ITaskService, TaskService>();

builder.Services.AddAutoMapper(typeof(AgentServiceMappings).Assembly);

builder.Services.AddCors(o => o.AddPolicy("AllowAll", x =>
{
    x.AllowAnyOrigin();
    x.AllowAnyMethod();
    x.AllowAnyHeader();
    x.WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding");
}));

builder.Services.AddGrpc();

builder.Services.AddHostedService<ExpiryTimeService>();

WebApplication app = builder.Build();

app.UseCors(options => options.SetIsOriginAllowed(x => _ = true).AllowAnyMethod().AllowAnyHeader().AllowCredentials());

app.UseGrpcWeb();

app.MapGrpcService<AgentService>().EnableGrpcWeb();

app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");

AgentService.StartTime = DateTime.UtcNow;

app.Run();

客户端代码

public AdminService()
{
    _channel = GrpcChannel.ForAddress("http://xxx.xxx.xxx.xxx:5000/", new GrpcChannelOptions {
        HttpHandler = new GrpcWebHandler(new HttpClientHandler())
    });
    _client = new AgentClient(_channel);
}
排查与解决步骤
  • 开放VPS端口权限:检查VPS的系统防火墙(如Linux的ufw/iptables、Windows防火墙)和云服务商的安全组规则,确保添加了TCP 5000端口的入站允许规则,允许外部客户端访问。

  • 修改服务端绑定地址:默认app.Run()仅绑定localhost,外部无法访问。需修改服务端监听地址为所有网卡:

    • 直接在app.Run()指定:app.Run("http://0.0.0.0:5000");
    • 或通过配置文件appsettings.json设置:
      {
        "Urls": "http://0.0.0.0:5000"
      }
      
  • 验证服务监听状态:在VPS上执行命令确认服务是否正常监听5000端口:

    • Linux:netstat -tulpn | grep 5000,查看输出中是否有服务进程绑定0.0.0.0:5000
    • Windows:netstat -ano | findstr :5000,确认进程ID对应的服务正在运行
  • 检查客户端连接地址:确保客户端代码中的xxx.xxx.xxx.xxx是VPS的公网IP地址,而非内网IP或localhost;若使用域名,需确认域名解析指向正确的公网IP。

  • 测试网络连通性:在客户端机器上执行telnet xxx.xxx.xxx.xxx 5000或curl http://xxx.xxx.xxx.xxx:5000,如果无法连通,说明网络层面存在阻塞,回到防火墙和端口绑定的检查步骤。

  • 反向代理配置检查(若使用):如果服务端部署时使用了Nginx等反向代理,需确保代理配置支持gRPC Web,比如设置正确的请求头(Content-Type: application/grpc-web)和转发规则,避免请求被拦截。

内容的提问来源于stack exchange,提问作者Amin .D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:44