How to fix : Received RST_STREAM with error code 2 when using nginx reverse proxy
maximewimez
nginx-forum at forum.nginx.org
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
ipv4:163.172.143.250:443","file":"src/core/lib/surface/call.cc","file_line":1041,"grpc_message":"Received
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: exemple.com, request: "POST
/google.cloud.dialogflow.v2beta1.Sessions/StreamingDetectIntent HTTP/2.0",
upstream: "grpcs://...:443", host: "example.com:443"
I've tried to increase grpc_buffer_size parameter to big value, but didn't
worked..
```
Here is my current Nginx config :
```
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
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 README.md
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://dialogflow.googleapis.com:443;
}
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/exemple.com/privkey.pem;
}
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
}
listen 80 ;
listen [::]:80 ;
return 404; # managed by Certbot
}
}
```
Posted at Nginx Forum: https://forum.nginx.org/read.php?2,285506,285506#msg-285506
More information about the nginx
mailing list