Nginx日志管理

Posted 徐中祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx日志管理相关的知识,希望对你有一定的参考价值。

nginx日志管理

Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义格式

1.log_format语法

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

2.默认日志格式

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
# 默认日志格式                      
10.0.0.1 - - [27/Nov/2020:09:36:08 +0800] "GET /images/tank.ico HTTP/1.1" 200 25214 "http://www.tank.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/84.0.4147.89 Safari/537.36" "-"

# 修改默认时间的日志格式
[root@web02 ~]# vim /etc/nginx/nginx.conf 
    log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

# 查看修改后的日志格式
10.0.0.1 - - [15/Apr/2021:18:47:03 +0800] "GET / HTTP/1.1" 200 1637 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" "-"

3.日志常用变量

$remote_addr        # 记录客户端IP地址(只记录上一个客户端IP)
$remote_user        # 记录客户端用户名
$time_local         # 记录通用的本地时间
$time_iso8601       # 记录ISO8601标准格式下的本地时间
$request            # 记录请求的方法以及请求的http协议
$status             # 记录请求状态码(用于定位错误信息)
$body_bytes_sent    # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent         # 发送给客户端的总字节数
$msec               # 日志写入时间。单位为秒,精度是毫秒。
$http_referer       # 记录从哪个页面链接访问过来的
$http_user_agent    # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录经过的所有服务器的客户端IP地址
$X-Real-IP		    # 记录起始的客户端IP地址和上一层客户端的IP地址             
$request_length     # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time       # 请求花费的时间,单位为秒,精度毫秒

# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

4.nginx日志切割

[root@web01 ~]# vim /etc/logrotate.d/nginx 
#指定要切割的日志
/var/log/nginx/*.log {
	   #每天切割日志
        daily
        #忽略日志丢失
        missingok
        #日志保留时间 52天
        rotate 52
        #日志压缩
        compress
        #延时压缩
        delaycompress
        #不切割空日志
        notifempty
        #切割好的日志权限
        create 640 nginx adm
        #开始执行脚本
        sharedscripts
        #标注脚本内容
        postrotate
        		#判断nginx启动
                if [ -f /var/run/nginx.pid ]; then
                		#重新生成一个access.log
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        #脚本执行完毕
        endscript
}

以上是关于Nginx日志管理的主要内容,如果未能解决你的问题,请参考以下文章

nginx错误界面优化和日志管理

Nginx教程 Nginx日志管理

nginx之旅(第二篇):nginx日志管理nginx防盗链nginx虚拟主机

Nginx 日志管理 日志自动备份

Nginx日志管理

LNMP之nginx日志管理