C++ grpc 客户端到 Nginx ssl

问题描述

我有一个Nginx 包裹的 grpc 服务器。 我正在尝试用不同的语言编写客户端。 python版本运行良好

    cred = grpc.ssl_channel_credentials()
    channel = grpc.secure_channel(NAME,cred)
    stub = MyServiceStub(channel)

但类比的 C++ 代码没有。

auto channel = grpc::CreateChannel(NAME,grpc::SslCredentials(grpc::SslCredentialsOptions()));
auto stub = MyService::NewStub(channel);

Nginx 版本 1.16.1(使用 OpenSSL 1.0.2k-fips 构建,2017 年 1 月 26 日)

server {
    listen  80;
    server_name NAME;

    location / {
        return 302 grpc://NAME$request_uri;
    }
}

server {
    listen  443 ssl http2;
    server_name NAME;
    ssl_certificate chain.pem;
    ssl_certificate_key privkey.pem;

    location / {
        grpc_pass grpc://IP;
        grpc_read_timeout 3600;
    }


}

Nginx 访问日志打印 "PRI * HTTP/2.0" 400 157 "-" "-" "-" 并调试错误请求

[debug] 24255#0: *103047 http check ssl handshake
[debug] 24255#0: *103047 http recv(): 1
[debug] 24255#0: *103047 plain http
[debug] 24255#0: *103047 http wait request handler

但是一个很好的要求

[debug] 30192#0: *105029 http check ssl handshake
[debug] 30192#0: *105029 http recv(): 1
[debug] 30192#0: *105029 https ssl handshake: 0x16
[debug] 30192#0: *105029 tcp_nodelay
[debug] 30192#0: *105029 ssl get session: 5F263490:3

grpc 版本 1.34.0 和 c++ 客户端输出错误

Failed parsing HTTP/2
Expected SETTINGS frame as the first frame,got frame type 80
Failed to connect to all addresses
Trying to connect an http1.x server

我发现了一个类似的 Go 问题 How to find out why Nginx return 400 while use it as http/2 load balancer? ,但不知道如何在 C++ 中传递 "h2"。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...