引言
nginx服务器日志相关指令主要有两条:log_format,用来设置日志格式;access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参考ngx_http_log_module。
log_format
设置日志格式
log_format指令用来设置日志的记录格式,它的语法如下:
log_format name format {format …}
其中,name表示定义的格式名称,format表示定义的格式样式。
说明:
① log_format有一个默认的、无须设置的main日志格式,如下图所示:
② 也可以根据自己的需求,自定义日志的记录格式,但是名称不能重复
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
192.168.122.1 - - [17/Dec/2018:10:47:58 +0800] "GET / HTTP/1.1"
304 0 "-"
"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
常用的内置变量以及含义
参数 说明 示例
$remote_addr 客户端地址 192.168.122.1
$remote_user 客户端用户名称 --
$time_local 访问时间和时区 17/Dec/2018:10:47:58 +0800
$request 请求的URI和HTTP协议 "GET / HTTP/1.1"
$status HTTP请求状态 304
$upstream_status upstream状态 0
$body_bytes_sent 发送给客户端文件内容大小 -
$http_referer url跳转来源,用于记录是从哪个页面链接访问过来的
$http_user_agent 用户终端浏览器等信息,即客户浏览器的相关信息 "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.wang.com 192.168.100.100
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80
$request_time 整个请求的总时间 0.205
$upstream_response_time 请求过程中,upstream响应时间 0.002
详解$http_x_forwarded_for
为什么引出$http_x_forwarded_for?
答案:
①remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP; 如果使用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。
②因此引出内置变量$x_forwarded_for: 用户经过代理时,代理会增加这个字段,这样就能保证nginx就能使用内置变量$http_x_forwarded_for获取到客户端的真实IP。 没有使用代理时,此字段为空
X-Forwarded-For 请求头格式介绍
X-Forwarded-For: client, proxy1, proxy2
可以看到,X-F-F 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。
举例说明:如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 X-F-F 标准,服务端最终会收到以下信息:X-Forwarded-For: IP0, IP1, IP2
Proxy3 直连服务器,列表中并没有 IP3,IP3 可以通过服务端的 Remote Address 字段获得。
access_log
配置
观察nginx.conf配置文件中的server段,可以看到如下的信息:access_log logs/host.access.log main;
logs/host.access.log:保存访问信息的日志文件是
使用main格式存储访问信息