nginx日志配置详解
Nginx作为一款高效、稳定的Web服务器和反向代理服务器,其日志功能在系统运维中扮演着至关重要的角色,通过合理的日志配置,管理员可以监控网站流量、分析用户行为、排查故障等,本文将详细介绍Nginx的日志配置方法及其应用。
log_format指令
Nginx提供了log_format指令用于定义日志格式,默认情况下,Nginx预定义了一种名为combined的日志格式:
log_format combined '$remote_addr $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
如果需要自定义日志格式,可以使用以下语法:
log_format name [escape=default|json] string ...;
name: 格式名称,在access_log指令中引用。
escape: 设置变量中的字符编码方式,可以是json或default,默认是default。
string: 要定义的日志格式内容,可以使用Nginx变量。
自定义一个名为main的日志格式:
log_format main '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
并在access_log指令中引用它:
access_log /var/logs/nginxaccess.log main;
Nginx常用日志变量
以下是一些常用的Nginx日志变量及其说明:
变量 | 说明 | 示例 |
$remote_addr | 客户端IP地址 | 211.28.65.253 |
$remote_user | 客户端用户名称 | |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request | 请求的URL和HTTP协议 | “GET /article10000.html HTTP/1.1” |
$status | HTTP请求状态 | 200 |
$body_bytes_sent | 发送给客户端的内容大小 | 1547 |
$http_referer | URL跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器信息 | “Mozilla/4.0 (compatible; MSIE 8.0; …)” |
$request_time | 请求处理时间,单位为秒,精度毫秒 | 0.205 |
$upstream_status | upstream状态 | 200 |
$http_x_forwarded_for | HTTP头信息中的XForwardedFor字段 | “192.168.1.1” |
access_log指令
access_log指令用于配置访问日志:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
path: 指定日志文件的存储路径。
format: 指定日志格式,默认使用预定义的combined格式。
buffer: 指定日志写入时的缓存大小,默认是64k。
gzip: 启用gzip压缩,压缩级别从1到9,数值越大压缩比越高。
flush: 设置缓存的有效时间,超过时间后缓存中的内容将被清空并写入磁盘。
if: 条件判断,如果指定的条件计算结果为0或空字符串,则该请求不会写入日志。
access_log /var/logs/nginxaccess.log main buffer=32k gzip flush=5s;
error_log指令
error_log指令用于配置错误日志:
error_log file [level];
file: 指定日志文件的存储路径。
level: 指定日志级别,可选值包括debug, info, notice, warn, error, crit, alert, emerg,按紧急程度从低到高排列,只有日志的错误级别等于或高于level指定的值才会写入错误日志中,默认值是error。
error_log /var/logs/nginx/nginxerror.log warn;
rewrite_log指令
rewrite_log指令用于记录重写日志,由ngx_http_rewrite_module模块提供:
rewrite_log on | off;
默认值是off,启用时将在error log中记录notice级别的重写日志:
rewrite_log on;
FAQs
问题1: Nginx如何自定义日志格式?
答:可以通过log_format指令自定义日志格式。
log_format main '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
然后在access_log指令中引用这个自定义的格式:
access_log /var/logs/nginxaccess.log main;
问题2: Nginx日志中的$remote_addr和$http_x_forwarded_for有什么区别?
答:$remote_addr记录的是直接连接到Nginx服务器的客户端IP地址,而$http_x_forwarded_for记录的是经过HTTP代理或者负载均衡器传递的真实客户端IP地址,当Nginx位于负载均衡器之后时,$remote_addr获取的是负载均衡器的IP地址,而$http_x_forwarded_for可以获取到真实的客户端IP地址。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1099960.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复