Почему запрос клиента gRPC на cerbot позволил серверу nginx сообщить об ошибке `ai_socktype` - PullRequest
0 голосов
/ 03 июля 2019

Я установил 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?

...