Nginx-日志配置
Nginx 配置
访问日志配置
在 Nginx 配置文件中,你可以指定访问日志的格式。Nginx 允许你自定义日志格式,可以使用 log_format 指令来配置它。
默认日志格式配置:
默认情况下,Nginx 会在配置文件中启用访问日志,并使用默认格式:
http {
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 /var/log/nginx/access.log main;
# 其他配置...
}
- log_format:定义日志的格式。上面这个 main 格式会记录访问者的 IP 地址、请求时间、请求方法、状态码、发送的字节数等。
- access_log:定义访问日志文件的路径和格式。在这个例子中,日志被写入 /var/log/nginx/access.log 文件,并使用 main 格式。
在 Nginx 配置中,日志格式(通过 log_format 指令定义)使用了多个变量来记录请求的详细信息。以下是常见的 Nginx 日志变量,它们可以在日志格式中使用:
-
基本请求信息
- $remote_addr:客户端的 IP 地址。
- $remote_port:客户端的端口号。
- $remote_user:客户端的用户名,如果启用了 HTTP 身份验证。
- $time_local:本地时间,格式为 [day/month/year:hour:minute:second zone]。
- $request:请求的完整字符串(例如,GET /index.html HTTP/1.1)。
- $request_method:请求的方法(例如,GET、POST)。
- $request_uri:请求的 URI 部分,不包括域名和协议(例如,/index.html)。
- $status:返回的 HTTP 状态码(例如,200、404)。
- $body_bytes_sent:返回给客户端的响应体字节数(不包括头部)。
- $http_referer:HTTP referer 头部,指示请求来自哪个页面。
- $http_user_agent:HTTP user-agent 头部,指示客户端使用的浏览器或其他客户端类型。
- $http_x_forwarded_for:通过代理服务器转发的客户端 IP 地址(如果存在)。
-
时间和延迟信息
- $time_iso8601:ISO 8601 格式的时间(例如,2025-03-06T08:57:10+00:00)。
- $msec:请求开始时的时间戳(以秒为单位的浮动值)。
- $request_time:请求处理时间(单位为秒)。
- $upstream_response_time:上游服务器响应的时间(如果使用代理,显示该时间)。
- $pipe:如果请求被管道化处理,返回 |,否则返回 -。
-
响应和数据
- $status:HTTP 状态码(例如,200、301、404)。
- $bytes_sent:发送到客户端的字节数(包括响应头部和主体)。
- $sent_http_*:指示发送给客户端的特定响应头部。
- 例如,$sent_http_content_type 表示返回的 Content-Type 响应头。
-
请求头信息
- $http_*:客户端请求的 HTTP 头部信息,使用 http_ 前缀。常见的如:
- $http_user_agent:客户端浏览器的用户代理字符串。
- $http_referer:请求来源的 URL。
- $http_x_forwarded_for:代理服务器转发的客户端 IP。
- $http_cookie:请求中携带的 Cookie 信息。
-
服务器信息
- $server_addr:服务器的 IP 地址(如果有多个网络接口)。
- $server_name:当前请求匹配的服务器名称。
- $server_port:服务器的端口号。
- $hostname:服务器的主机名。
-
上游服务器信息
当请求通过代理或反向代理时,以下变量会记录上游服务器的相关信息:- $upstream_addr:上游服务器的地址。
- $upstream_cache_status:缓存状态(如 MISS、HIT)。
- $upstream_status:上游服务器的响应状态码。
-
其他有用的变量
- $query_string:请求的查询字符串(如果有的话)。
- $ssl_cipher:SSL 加密套件(如果请求是 HTTPS)。
- $ssl_protocol:SSL 协议版本(如果请求是 HTTPS)。
- $connection:连接的唯一 ID。
- $connection_requests:连接中处理的请求数量。
示例日志格式配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/access.log main;
在这个示例中,log_format 使用了多个变量来记录每个请求的详细信息,包括客户端 IP 地址、请求时间、状态码、请求时间等。