Nginx配置中的log_format(设置详细的日志格式)

版权声明:guojawee https://blog.csdn.net/weixin_36750623/article/details/85008043

配置文件 (/usr/local/nginx/conf/nginx.conf)

引言

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格式存储访问信息

猜你喜欢

转载自blog.csdn.net/weixin_36750623/article/details/85008043