I have a gRPC Java app and I configured Fabio to balance the load (I will be running 2+ instances of app) and CloudFlare for proxy.
What I have done so far:
Nginx reverse proxy setup
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;
}
Subdomain configuration for domain (IP is random in picture)
Fabio setup
gRPC app runs in a Docker container
When I connect to this server using gRPC client, I get nginx error "502 Bad Gateway".
I can see from access.log that request actually reaches with http/2.0 but I am confused and I don't know where to look for problem.
Also error.log shows this for requests:
2022/12/12 23:38:45 [error] 506072#506072: *1020 upstream sent too large http2 frame: 4740180 while reading response header from upstream, client: 61.142.22.151, server: grpc.example.com, request: "POST /Syncer/doUpdate HTTP/2.0", upstream: "grpc://127.0.0.1:9999", host: "grpc.example.com:443"
Adding GRPC listener with port solved the issue
Add this line to fabio.properties file
proxy.addr = :8888;proto=grpc