Nginx 日志配置指南
Nginx 提供了强大的日志功能,可以灵活配置日志的输出格式以满足不同的需求。本篇文章将介绍如何设置 Nginx 的日志输出格式,以及常用变量的含义和使用。
配置 Nginx 日志输出格式
设置日志格式
Nginx 使用 log_format
指令定义日志格式,语法如下:
log_format <name> 'variable variable variable';
<name>
是日志格式的名称。variable
是日志格式中使用的变量。
应用日志格式
设置好日志格式后,可以通过 access_log
指令指定日志文件的路径并应用日志格式。
access_log <Path> <name>;
<Path>
是日志文件的路径,例如/var/log/nginx/access.log
。<name>
是之前定义的日志格式名称。
常用变量及其含义
以下是一些常用的 Nginx 日志变量及其含义:
变量 | 含义 |
---|---|
$remote_addr |
客户端的 IP 地址。 |
$remote_user |
远程用户,通常用于 HTTP 基本认证。 |
$time_local |
请求的时间和时间区域。 |
$request |
请求行,包括方法、URL 和 HTTP 协议版本。 |
$status |
HTTP 响应状态码。 |
$body_bytes_sent |
发送给客户端的总字节数,不包括响应头的大小。 |
$http_referer |
请求的来源页面(如果有)。 |
$http_user_agent |
客户端的用户代理字符串。 |
$request_body |
请求体(例如 POST 请求的数据)。 |
$http_x_forwarded_for |
通过代理时,记录原始 IP 地址。 |
$http_host |
请求的主机名。 |
$request_time |
处理请求所花费的时间(单位为秒,精度为毫秒)。 |
$upstream_response_time |
upstream 响应时间(如果使用了 upstream 模块)。 |
$upstream_addr |
upstream 服务器的 IP 地址和端口。 |
$upstream_status |
upstream 服务器的响应状态码。 |
特殊变量注意事项
以下变量需要添加双引号 ""
或方括号 []
,以正确处理空格或特殊字符:
$time_local
通常放在方括号[]
中以突出时间戳。$request
、$http_referer
、$http_user_agent
、$http_x_forwarded_for
和$http_host
需要放在双引号""
中。
配置示例
简单日志格式
以下是一个简单的日志格式配置示例:
# 定义一个简单的日志格式
log_format simple '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent"';
# 设置访问日志的路径和使用的日志格式
access_log /var/log/nginx/access.log simple;
示例日志输出
假设客户端发起以下请求:
GET /index.html HTTP/1.1
日志输出如下:
192.168.1.100 - - [12/Dec/2024:15:00:00 +0800] "GET /index.html HTTP/1.1" 200 1024 "http://www.example.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"