我为代理HTTPS服务安装了nginx,因此我使用“让我们加密”功能来自动配置证书,并将所有80流量重定向到443。
最近,我正在考虑添加gRPC服务,因此我的想法是添加一个特定的URI,以便gRPC客户端可以拨打以下地址:domain.com:443/rpc
。
此后,我遵循了nginx官方文档:https://www.nginx.com/blog/nginx-1-13-10-grpc/
并配置了网站:
location /rpc {
grpc_pass grpc://localhost:12345/
}
在服务器的HTTPs部分中。
但是,gRPC客户端报告:
rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp: lookup tcp/443/rpc: Servname not supported for ai_socktype"
exit status
这是客户端代码:
conn, err := grpc.Dial("domain.com:443/rpc", grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{InsecureSkipVerify: true})))
if err != nil {
logrus.Fatalf("did not connect: \n\t%v", err)
}
defer conn.Close()
...
简而言之,请求链如下:
gRPC客户端(启用SSL)<----> Nginx(具有SSL证书)<---> Intranet gRPC服务器(不具有SSL)
如何解决该错误?是因为我没有将gRPC调用的客户端证书附加到Nginx吗?如果是这样,是否有可能使客户端像浏览器与HTTPS服务器协商一样自动解决证书问题?