介绍
Nginx日志类型主要包括:
- error.log
- access_log
error.log主要记录nginx处理http请求的错误的状态,以及nginx服务本身运行的错误的状态。会按照不同的级别记录到error.log里面。
access_log会记录nginx每一次http请求的访问状态,主要用于分析每一次http的请求,以及客户行为进行分析。
一、实现方式
主要依赖于log_format,将日志变量记录到日志文件中。配置语法:
1 | Syntax:log_format name [escape=default|json]string ...; |
error.log
1
error_log /var/log/nginx/error.log warn;
定义了error_log的日志路径以及日志级别。日志示例:
1
2020/03/28 20:44:32 [error] 8178#8178: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.x.xxx, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.104", referrer: "http://192.168.1.104/"
access_log
1
2
3
4
5log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;定义了access_log日志路径以及日志格式,main是定义的格式名称。日志示例:
1
192.168.x.xxx - - [28/Mar/2020:20:44:32 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"
二、Nginx变量
http请求变量
- arg_PARAMETER
- http_HEADER
- send_http_HEADER
示例:记录用户的User-Agent字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[root@node1 nginx]# curl -v www.baidu.com >/dev/null
* About to connect() to www.baidu.com port 80 (#0)
* Trying 14.215.177.38...
* Connected to www.baidu.com (14.215.177.38) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Sat, 28 Mar 2020 14:53:19 GMT
< Etag: "588604dc-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:56 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<配置nginx配置文件:编辑nginx.conf添加User-Agent变量:
1
2
3log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';检查配置文件:-t表示检查,-c表示配置文件路径:
1
2
3[root@node1 nginx]# nginx -t -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful重新加载配置文件
1
[root@node1 nginx]# nginx -s reload -c /etc/nginx/nginx.conf
如果没有启动nginx服务,则先启动nginx:
1
[root@node1 nginx]# nginx -c /etc/nginx/nginx.conf
查看nginx服务,确保nginx成功启动
1
[root@node1 nginx]# ps -aux | grep nginx
构造日志,请求多次
1
[root@node1 nginx]# curl http://127.0.0.1
查看access_log
1
2
3
4[root@node1 nginx]# tail -n 200 /var/log/nginx/access.log
curl/7.29.0127.0.0.1 - - [28/Mar/2020:23:07:00 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
curl/7.29.0127.0.0.1 - - [28/Mar/2020:23:07:02 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
curl/7.29.0127.0.0.1 - - [28/Mar/2020:23:07:03 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
内置变量
自定义变量
三、log_format默认配置
1 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
remote_addr
表示客户端地址。
remote_user
表示http客户端请求nginx认证的用户名。
time_local
表示nginx时间。
request
表示request头的请求行。
status
表示response返回的状态。
body_bytes_sent
表示服务端响应给客户端body信息大小。
http_referer
在防盗链或者用户行为分析中经常用到,表示上一级页面是哪个。
http_user_agent
表示http头信息user_agent。指明客户端是用什么来访问的。
http_x_forwarded_for
会记录每一级用户通过http请求里面对于所携带的http信息。