在代理节点/表达应用程序时,nginx上不常见504s

时间:2018-01-24 05:16:25

标签: node.js express nginx proxy

我们有一个典型的nginx + nodejs设置,节点为v4.2.2& nginx v1.9.7.2

在express / nodejs上运行的后端服务应用程序使用recluster module以群集模式部署,子进程(等于#cores)分叉侦听同一端口。 nginx用作后端的反向代理。 nginx + nodejs的每个这样的实例/盒子(4核8 gb)在加载时服务大约100 tps,延迟大约120毫秒的90%。

问题是我们在nginx访问日志和相关的错误日志显示中很少见到(每5分钟1-2次)504s

(110: Connection timed out) while connecting to upstream

据我所知,当nginx timedout与nodejs服务器建立连接但是所有矩阵显示nodejs都是健康的时候会发生这种情况。此外,低于此错误的所有请求都有正常的延迟,只有一个关闭请求被卡住。在nodejs服务器上没有相应的日志条目意味着请求永远不会到达节点服务器。

下面的相关nginx配置。

worker_processes auto;
worker_rlimit_nofile 40000;

events {
  worker_connections 2000;
  use epoll;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 60;
}

upstream node {
 server 127.0.0.1:3000;
 keepalive 256;
}

server {
 listen 80;
 server_name abc.com

 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_http_version 1.1;
 proxy_set_header Connection "";
 proxy_read_timeout 60;

 location / {
  proxy_pass http://node;
 }
}

输出到ss -s是

Total: 747 (kernel 0)
TCP:   7400 (estab 481, closed 6890, orphaned 0, synrecv 0, timewait 
6890/0), ports 0

它显示高时间套接字但我们没有看到syslog中的任何错误意味着未达到操作系统的限制。

我试过调整网络和nginx主要是从blog post获取线索而没有运气。 在论坛中需要帮助以获得调试此方法的正确方向。让我知道我可以提供更多信息。

0 个答案:

没有答案