龙空技术网

Nginx的请求日志原来还有这么多的设置技巧。你真的会配置吗

秀才生活号 523

前言:

现在姐妹们对“nginx 统计请求次数”大约比较关切,各位老铁们都需要了解一些“nginx 统计请求次数”的相关知识。那么小编也在网上收集了一些对于“nginx 统计请求次数””的相关内容,希望你们能喜欢,我们一起来学习一下吧!

log 阶段是http请求处理11个阶段的最后一个阶段。

这个阶段主要靠ngx_http_log_module模块来处理。

功能:把http请求相关信息记录到日志中。

注意:这个模块是没有办法禁用的。

语法:

Syntax: log_format $name [escape=default|json|none] string ...; Default: log_format combined "..."; Context: http

log_format就是定义日志的格式 ,其默认值是combined,只能出现在http的上下文中。

默认格式:

log_format combined '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ' '"$http_referer""$http_user_agent"';

日志文件路径配置

Syntax: access_log $path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];access_log off;Default: access_log logs/access.log combined;Context: http, server, location, if in location, limit_except

access_log 主要控制日志路径,及是否打开访问日志。format是可选项如果不填,则默认使用log_format也就是默认的combined

path路径里可以包含变量的,比如我们用一个Nginx搭建了好几个域名的服务。默认情况下所有域名的日志都是在同一个日志文件里的。我们可以在path中加上host的变量,这样每个域名都有自己单独的日志文件了。

还可以根据条件判断是否记录请求日志。

日志缓存

功能:如果每次日志都要写入磁盘,那么会频繁引发io调用,所以批量将内存中的日志写入磁盘,可以提升性能。

使用缓存后将日志写入磁盘的时机:

1. 所有待写入磁盘的日志大小超出缓存大小,也就是缓存中的大小超出access_log 中的buffer大小。

2. 达到flush知道的过期时间。比如flush 是1分钟,到了1分钟没有到达buffer大小也会写入磁盘。和redis的设计思想有类似的地方。

3. worker进程执行reopen命令,或正在关闭的时候也会记录日志。

日志还有压缩功能功能:批量压缩内存中的日志后,再写入磁盘。buffer大小默认是64KB压缩级别默认是1 (1最快 压缩率最低,9 最慢 压缩率最高)

文件句柄缓存

当我们日志文件名中包含变量时,可能会被经常打开关闭,还有一种优化方案,就是缓存一些文件句柄。

语法

Syntax: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];open_log_file_cache off;Default: open_log_file_cache off;Context: http, server, location

Syntax: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; open_log_file_cache off; Default: open_log_file_cache off; Context: http, server, location

参数详解

max:缓存内的最大文件句柄数量,超出后用LRU算法淘汰inactive:文件访问完后在这段时间内不会被关闭。默认是10秒min_uses:在inactive时间内使用次数超过min_uses才会继续存在内存中。valid:超出valid时间后,将对缓存的日志文件检查是否存在。默认是60soff:关闭缓存功能。

标签: #nginx 统计请求次数