JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

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

wys521 2024-09-17 02:17:10 精选教程 28 ℃ 0 评论

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命令,或正在关闭的时候也会记录日志。


日志还有压缩功能

  1. 功能:批量压缩内存中的日志后,再写入磁盘。
  2. buffer大小默认是64KB
  3. 压缩级别默认是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时间后,将对缓存的日志文件检查是否存在。默认是60s
  • off:关闭缓存功能。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表