Я установил nginx для службы HTTPS прокси и, таким образом, использовал Let's encrypted, который автоматически настроил сертификат и перенаправил весь трафик 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/
}
в разделе HTTP сервера.
Однако клиент 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) <---> сервер gRPC в интрасети (без SSL)
Как я могу устранить ошибку? Это потому, что я не прикрепил сертификат клиента для вызовов gRPC к Nginx? Если это так, можно ли заставить клиента автоматически разрешать проблему с сертификатом так же, как браузер ведет переговоры с сервером HTTPS?