前言:
现在姐妹们对“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 统计请求次数