gpt4 book ai didi

nginx - 如何修复 : Received RST_STREAM with error code 2 when using nginx reverse proxy

转载 作者:行者123 更新时间:2023-12-04 15:41:34 30 4
gpt4 key购买 nike

我目前正在树莓上使用 dialogflow api。
使用 grpc 调用 StreamingDetectIntent 方法时一切正常。
我必须在我的产品上使用多个 api,因此,我试图在它们前面放置一个反向代理。就这样,我只能调用一个地址
我正在使用 nginx 将我的 GRPC 请求反向代理到 google api。
我在调用简单方法时没有问题,但是在调用像 StreamingDetectIntent 这样的流方法时,在请求过程中出现错误。

Dialogflow 在获取来自我的客户端的音频通量方面没有问题,但是在获取请求的最后一部分(下游通量)方面遇到了问题。

这是我的客户给我的错误:

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}"
>

在这里我可以在 Nginx 日志中看到错误:
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"

我试图将 grpc_buffer_size 参数增加到大值,但没有奏效..

这是我当前的 Nginx 配置:
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

}

}

最佳答案

GRPC 元数据可能存在问题(尤其是用户代理)。看看这些问题:

https://github.com/grpc/grpc-go/issues/1888

https://github.com/improbable-eng/grpc-web/issues/145

关于nginx - 如何修复 : Received RST_STREAM with error code 2 when using nginx reverse proxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728710/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com