在Nginx web服务器下的GRPC调用中获取504超时错误

在Nginx web服务器下的GRPC调用中获取504超时错误,nginx,grpc,Nginx,Grpc,我使用的是一元RPC方法。我有一个在nginxweb服务器下配置的服务器。以下是Nginx的配置: server { listen 80 http2; server_name test.grpc.tester.local; access_log /var/log/nginx/test.grpc.tester.local.access.log; error_log /var/log/nginx/test.grpc.tester.l

我使用的是一元RPC方法。我有一个在nginxweb服务器下配置的服务器。以下是Nginx的配置:

server {
        listen 80 http2;
        server_name test.grpc.tester.local;


        access_log /var/log/nginx/test.grpc.tester.local.access.log;
        error_log /var/log/nginx/test.grpc.tester.local.error.log;

        location / {
            grpc_pass grpc://localhost:8001;
        }
}
我有一个客户端,它也可以在同一台主机上使用。我以几种方式调用了这个一元方法,我有以下观察结果:

  • 如果我使用Nginx代理调用服务器RPC方法(test.grpc.tester.local:80),并且花费的时间超过1分钟,则会出现错误:

    • 在Nginx的错误日志中:
      从上游读取响应头时上游超时(110:连接超时)

    • 在客户端日志中:
      错误:1已取消:收到状态为504的http2标头

  • 如果我不使用Nginx,直接使用localhost:8001进行访问,它不会给出错误(即使服务器需要超过1分钟)并给出成功状态

  • 我在这里的问题是如何增加请求时间,这样就不会出现超时错误。我尝试了以下配置,但没有成功:

        proxy_connect_timeout  600s;
        proxy_send_timeout  600s;
        proxy_read_timeout  600s;
        fastcgi_send_timeout 600s;
        fastcgi_read_timeout 600s;
    
    有人能指导我如何解决这个问题吗


    谢谢。

    我遇到了相同的问题,似乎通过以下配置得到了修复

    location /grpweburl
    {
        proxy_pass http://localhost:5000/grpweburl;
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_connect_timeout  600s;
        proxy_send_timeout  600s;
        proxy_read_timeout  600s;
    }
    
    请注意-我正在使用grpc网络。不仅仅是grpc。但我怀疑添加缓冲设置会像对我一样解决您的问题

    我不确定为什么这种组合会起作用,但对我来说确实如此。缓冲部分用于确保数据更新立即发送到客户端

    结合超时设置,如果grpc服务没有给出结果,我现在只能每隔10分钟从nginx获得一个http-504。正如所料

    为了不干扰正常操作,我只为grpc web url设置了这些配置设置