Nginx访问日志条目不会在某些连接发生时创建

时间:2019-02-21 23:23:00

标签: node.js nginx load-balancing nginx-reverse-proxy nginx-config

我的网站架构如下:

互联网->负载平衡器-> webserver / api

因此,在负载平衡器计算机设置上有一个nginx作为负载平衡器,并且在webserver / api节点上也有一个nginx充当反向代理。 Web服务器服务器(通过负载平衡器)接收来自浏览器的请求,通过HTTP访问api,并将页面呈现给浏览器。 Web服务器和api都是nodejs应用。

nginx负载均衡器具有Web服务器的日志条目-> api连接,但是直到关闭浏览器(已通过Chrome和Firefox测试),它才记录初始客户端浏览器-> Web服务器连接。好像连接一直处于未完成状态,直到浏览器完全关闭,这时才写入日志条目。

nginx负载均衡器访问日志:

110.110.110.101 - - [21/Feb/2019:22:21:23 +0000] loadbalancer01 TCP 200 186833 825 0.047 upstream: 10.0.0.100:443
110.110.110.100 - - [21/Feb/2019:22:21:37 +0000] loadbalancer01 TCP 200 24327 3856 21.991 upstream: 10.0.0.100:443 <-- only created after browser is closed
  • 110.110.110.100-与Chrome / Firefox连接的客户端的IP地址
  • 110.110.110.101-Web服务器/ API节点公共接口
  • 10.0.0.100-Web服务器/ API节点专用接口

首先会记录webserver-> api连接,即使第二次明显发生,并且只有在客户端浏览器完全关闭时才记录客户端浏览器-> webserver连接。

是否存在某种缓冲?我没有在流阻止日志记录配置中使用buffer参数:

log_format combined '$remote_addr - - [$time_local] $hostname $protocol $status $bytes_sent $bytes_received $session_time upstream: $upstream_addr';

access_log /var/log/nginx/access.log combined;

为什么仅在关闭浏览器时才记录连接?如何确保在发生连接时记录初始连接?

[更新-添加了日志配置,还请注意,已经编辑了ips]

1 个答案:

答案 0 :(得分:0)

我通过比较浏览器连接到负载均衡器的标头与脚本启动的连接之间的标头来弄清这一点。原来浏览器设置了keeps the connection open的“连接:保持活动”标头,因此可以使用同一连接发送多个请求。

在负载均衡器公共ip上运行此命令的有用命令,以查看连接头:

sudo tcpdump -nn -A -s1500 -l -i eth0端口80

要注意的另一件事是,如果您将ufw用作防火墙,它将设置具有限制的基本iptables规则,因此每分钟仅记录前3个连接。