Nginx日志配置

日志输出配置

nginx的日志有两种

  1. error_log: 记录服务器错误, 配置在全局范围
  2. access_log: 记录每一次请求访问, 配置在http范围

日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. error.log日志配置
# error_log 日志存储位置 错误日志级别;
error_log /var/log/nginx/error.log warn;

http {
# 2. access.log日志配置
# access_log 日志存储位置 日志格式名;
access_log /var/log/nginx/access.log main;
# log_format 日志格式名 [escape=default|json] 参数字符串;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
}

日志格式

语法: log_format 日志格式名 [escape=default|json] string ...;
日志格式可以携带一些内置的变量, 如IP地址之类的。

HTTP请求变量

  1. arg_PARANERER: 请求参数
  2. http_HEADER: 请求头
  3. sent_HEADER: 响应头

Nginx支持参数、请求头和响应头, 只要把字母转成小写, 横线转为下划线, 再加上arghttpsent的前缀即可。
比如请求头的User-Agent, 对应的变量为http_user_agent

内置变量

Nginx http core模块的变量
这里只介绍nginx.conf中默认配置的变量

  1. $remote_addr: 客户端地址, 如192.168.1.7
  2. $remote_user: 随基本身份验证提供的用户名
  3. $time_local: 通用日志格式的本地时间, 如07/Jul/2018:15:33:14 +0800
  4. $request: 完整原始的请求行, 如GET / HTTP/1.1
  5. $status: 响应状态码, 如200404
  6. $body_bytes_sent: 发送到客户端的字节数,不包括响应头

自定义变量

set只能配置在serverlocationif中。

1
2
3
4
5
6
server {
set $变量名 "变量值"
location / {
set $变量名 "变量值"
}
}