Apollo graphql和Nginx的空响应

Apollo graphql和Nginx的空响应,nginx,graphql,reverse-proxy,apollo-server,Nginx,Graphql,Reverse Proxy,Apollo Server,我们的应用程序通过Apollo、Express和Nest.js公开了一个graphql API。在prod/staging环境中,应用程序部署在Nginx入口(kubernetes)后面。该API在生产环境中运行良好,并具有kubectl端口转发功能。但是,当我们尝试使用Nginx背后的API时,当响应负载高于大约1kb时,HTTP响应将挂起(TCP超时)。我们得出了一些结论: 应用程序工作正常(我们从日志中看到它返回了正确的响应) 我们试图增加Nginx代理缓冲区的大小,但没有成功 我们尝试

我们的应用程序通过Apollo、Express和Nest.js公开了一个graphql API。在prod/staging环境中,应用程序部署在Nginx入口(kubernetes)后面。该API在生产环境中运行良好,并具有
kubectl端口转发功能
。但是,当我们尝试使用Nginx背后的API时,当响应负载高于大约1kb时,HTTP响应将挂起(TCP超时)。我们得出了一些结论:

  • 应用程序工作正常(我们从日志中看到它返回了正确的响应)
  • 我们试图增加Nginx代理缓冲区的大小,但没有成功
  • 我们尝试在一个普通的REST端点上返回相同的负载(没有graphql,只有Nest.js控制器),结果成功了
因此,这似乎是一个与作为代理的Nginx和Apollo服务器之间的集成相关的问题。有人对此有什么想法吗

下面是导致问题的curl请求的示例:

 $ curl -v --location --request POST 'https://my-company.com/graphql' --header 'Content-Type: application/json' --data-raw '{"query":"query {\n  myQueryHere \n}","variables":{}}'
  Note: Unnecessary use of -X or --request, POST is already inferred.
  *   Trying <my-ip-here>...
  * TCP_NODELAY set
  * Connected to my-company (my-ip-here) port 443 (#0)
  * ALPN, offering h2
  * ALPN, offering http/1.1
  * successfully set certificate verify locations:
  *   CAfile: /etc/ssl/certs/ca-certificates.crt
    CApath: /etc/ssl/certs
  * (304) (OUT), TLS handshake, Client hello (1):
  * (304) (IN), TLS handshake, Server hello (2):
  * TLSv1.2 (IN), TLS handshake, Certificate (11):
  * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
  * TLSv1.2 (IN), TLS handshake, Server finished (14):
  * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
  * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
  * TLSv1.2 (OUT), TLS handshake, Finished (20):
  * TLSv1.2 (IN), TLS handshake, Finished (20):
  * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
  * ALPN, server did not agree to a protocol
  * Server certificate:
  *  subject: CN=*.mycompany.com
  *  start date: Dec  4 00:00:00 2019 GMT
  *  expire date: Jan  4 12:00:00 2021 GMT
  *  subjectAltName: host "my-company" matched cert's "*.my-company"
  *  issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
  *  SSL certificate verify ok.
  > POST /graphql HTTP/1.1
  > Host: my-company
  > User-Agent: curl/7.58.0
  > Accept: */*
  > Content-Type: application/json
  > Content-Length: 159
  > 
  * upload completely sent off: 159 out of 159 bytes
  * TLSv1.2 (IN), TLS alert, Client hello (1):
  * Empty reply from server
  * Connection #0 to host my-company left intact
  curl: (52) Empty reply from server
$curl-v--位置--请求发布'https://my-company.com/graphql'--header'内容类型:application/json'--data raw'{“query”:“query{\n myQueryHere\n}”,“variables”:{}
注意:不必要地使用-X或--request,POST已经推断出来。
*努力。。。
*TCP_节点集
*已连接到我的公司(此处为我的ip)端口443(#0)
*阿尔卑斯山,提供h2
*ALPN,提供http/1.1
*已成功设置证书验证位置:
*CAfile:/etc/ssl/certs/ca-certificates.crt
CApath:/etc/ssl/certs
*(304)(OUT)、TLS握手、客户端问候(1):
*(304)(IN)、TLS握手、服务器hello(2):
*TLSv1.2(IN),TLS握手,证书(11):
*TLSv1.2(IN)、TLS握手、服务器密钥交换(12):
*TLSv1.2(IN),TLS握手,服务器完成(14):
*TLSv1.2(输出)、TLS握手、客户端密钥交换(16):
*TLSv1.2(OUT),TLS更改密码,客户端hello(1):
*TLSv1.2(输出),TLS握手,完成(20):
*TLSv1.2(IN),TLS握手,完成(20):
*使用TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256的SSL连接
*ALPN,服务器不同意协议
*服务器证书:
*主题:CN=*.mycompany.com
*开始日期:格林威治时间2019年12月4日00:00:00
*过期日期:1月4日12:00:00 2021 GMT
*主题名称:主机“我的公司”匹配证书“*.my company”
*发行人:C=美国;O=亚马逊;OU=服务器CA 1B;CN=亚马逊
*SSL证书验证正常。
>POST/graphql HTTP/1.1
>主持人:我的公司
>用户代理:curl/7.58.0
>接受:*/*
>内容类型:application/json
>内容长度:159
> 
*上传已完全发送:159字节中的159字节
*TLSv1.2(IN)、TLS警报、客户端你好(1):
*来自服务器的空回复
*与我的公司主机的连接#0保持不变
curl:(52)来自服务器的空回复

您是否检查了nginx日志中的潜在错误?是的!日志中没有任何错误,只有访问条目。您可以共享您的ingress.yaml文件吗?您是否检查了nginx日志中的潜在错误?是的!日志中没有错误,只有访问条目。您可以共享您的ingress.yaml文件吗?