我有一个 gRPC Java 应用程序,我配置了 Fabio 来平衡负载(我将运行 2 个以上的应用程序实例)和 CloudFlare 作为代理。
到目前为止我所做的:
Nginx 反向代理设置
server {
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
server_name grpc.example.com;
location /{
grpc_pass grpc://127.0.0.1:9999;
}
ssl_certificate /etc/letsencrypt/live/grpc.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/grpc.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
法比奥设置
gRPC 应用程序在 Docker 容器中运行
当我使用 gRPC 客户端连接到此服务器时,出现 nginx 错误 “502 Bad Gateway”。
我可以从 access.log 看到请求实际上是通过 http/2.0 到达的,但我很困惑,我不知道在哪里寻找问题。
error.log 也显示了请求:
2022/12/12 23:38:45 [错误] 506072#506072:*1020上游发送太大的http2帧:4740180,同时从上游读取响应头,客户端:61.142.22.151,服务器:grpc.example.com,请求:“POST /Syncer/doUpdate HTTP/2.0”,上游:“grpc://127.0.0.1:9999”,主机:“grpc.example.com:443”
添加带端口的 GRPC 监听器解决了问题
将此行添加到 fabio.properties 文件
proxy.addr = :8888;proto=grpc