首页 > 解决方案 > ApolloClient 3 并发 30 graphql 订阅调用从 nginx 返回 502

问题描述

在我的 reactjs 客户端中使用 Apollo Client 3。我们有 nginx 1.17.8 将传入请求反向代理到 .net core 2.1 后端 api。我们的 nginx 和 .net 核心 api 在 Openshift 4.4 上各自的 pod 中运行 一切正常,除非我们向 nginx 发送 30 个并发的 graphql 订阅请求。Nginx 开始突然返回 502 bad gateway response。然后,我们需要在 Apollo Client 中使用重试逻辑来处理这种情况。尽管我们可以通过 10 次重试来解决它,但这只能是一个临时解决方案,因为它会导致进程严重延迟。我们需要找到一个解决方案来阻止 nginx 发送 502 错误请求并优雅地处理这些并发订阅请求。我们是否应该增加一些参数让 nginx 能够将这样的并发 http 调用升级到 websocket?

Nginx配置如下;

        http {

                sendfile on;
                tcp_nopush on;
                tcp_nodelay on;
                types_hash_max_size 2048;
                include /etc/nginx/mime.types;
                default_type application/octet-stream;
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                ssl_prefer_server_ciphers on;

                map $http_origin $origin_allowed {
                  default 0;
                  https://${MY_DOMAIN_NAME} 1;
                  # ... add more allowed origins here
                }
            
                map $origin_allowed $origin {
                  default "";
                  1 $http_origin;
                }
                
                map $http_upgrade $connection_upgrade {
                  default upgrade;
                  ''      close;
                }            

                server {
                listen 8081 ssl http2;
                ssl_certificate  /etc/ssl/certs/cert.pem;
                ssl_certificate_key /etc/ssl/certs/cert.key;
                server_name ${MY_DOMAIN_NAME};

                location ~ ./myapiservice1$ {
                            proxy_pass  https://myapiservice1:49253;
                            proxy_http_version 1.1;
                            proxy_ssl_server_name on;
                            proxy_set_header   Upgrade $http_upgrade;
                            proxy_set_header   Connection $connection_upgrade;
                            proxy_set_header   Host $host;
                            proxy_cache_bypass $http_upgrade;
                            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_set_header   X-Forwarded-Proto $scheme;
                            proxy_connect_timeout       600;
                            proxy_send_timeout          600;
                            proxy_read_timeout          600;
                            send_timeout                600;                           
                          }
                }
        }

标签: nginxgraphwebsocketapollo-client

解决方案


推荐阅读