How to fix : Received RST_STREAM with error code 2 when using nginx reverse proxy

maximewimez nginx-forum at
Mon Sep 2 08:29:02 UTC 2019

I'm currently using the dialogflow api on a raspberry. Everything works fine
when calling StreamingDetectIntent method using grpc. I have to use
multiples apis on my product and so, I'm trying to put a reverse proxy in
front of them. Like that, I can call only one address I'm using nginx to
reverse proxy my GRPC request to google api. I have no problem when calling
simple method, but when calling a streaming method like
StreamingDetectIntent, I got an error during the request.

Dialogflow do not have problem to get the audio flux coming from my client,
but I got problem to get the last part of the request, the downstream flux.

Here is the error that my client give me :

grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
        status = StatusCode.INTERNAL
        details = "Received RST_STREAM with error code 2"
        debug_error_string =
"{"created":"@1567173815.816362297","description":"Error received from peer
RST_STREAM with error code 2","grpc_status":13}"

and here the error I can see in Nginx log :

upstream sent frame for closed stream 1 while reading upstream, client: ...,
server:, request: "POST
/ HTTP/2.0",
upstream: "grpcs://...:443", host: ""
I've tried to increase grpc_buffer_size parameter to big value, but didn't

Here is my current Nginx config :

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log debug;
pid        /var/run/;

events {
    worker_connections  1024;

http {

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request"
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    client_max_body_size 4000M;
    grpc_read_timeout 1d;
    grpc_send_timeout 1d;
    # this seems to fix it; but see comment in
    grpc_buffer_size 100M;

    include /etc/nginx/conf.d/*.conf;

    server {

        # SSL configuration
        listen 443 ssl http2;

        access_log /var/log/nginx/access_grpc.log main;

        location / {
            grpc_pass grpcs://;

        ssl_certificate /etc/letsencrypt/live/;

    server {

        if ($host = {
            return 301 https://$host$request_uri;

        listen 80 ;
        listen [::]:80 ;

        return 404; # managed by Certbot



Posted at Nginx Forum:,285506,285506#msg-285506

More information about the nginx mailing list