问题描述
我有一个用 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
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 (将#修改为@)