发布于 更新于
AI总结: 本文介绍了记录访问日志的重要性,以便在出现问题时进行检查。提供了Nginx的配置示例,包括自定义日志格式和参数列表,涵盖了多种变量的详细说明,如请求的IP地址、请求时间、状态码等。这些信息有助于调试和分析流量。
优化建议:
1. 考虑使用更简洁的日志格式,以减少日志文件的大小,便于存储和分析。
2. 定期清理和归档日志文件,防止占用过多磁盘空间。
3. 结合监控工具,实时分析日志数据,及时发现潜在问题。
4. 增加对敏感信息的过滤,确保日志安全性,防止泄露用户隐私。
5. 定期审查和更新日志格式,确保其适应不断变化的需求和技术标准。
记录访问的 log,为了在出现特殊情况时,方便检查出现问题的地方。
log_format access '$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 access;
# 拼成json格式
log_format main escape=json '{ "@timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr",'
'"costtime": "$request_time",'
'"realtime": "$upstream_response_time",'
'"status": $status,'
'"x_forwarded": "$http_x_forwarded_for",'
'"referer": "$http_referer",'
'"request": "$request",'
'"upstr_addr": "$upstream_addr",'
'"bytes":$body_bytes_sent,'
'"dm":$request_body,'
'"agent": "$http_user_agent" }';
# escape=json 不转义的话, $request_body 会有\x22字符
log_format main escape=json '$remote_addr - $remote_user [$time_local] $request '
'$status $request_time "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$request_body'
'\n';
$arg_PARAMETER 这个变量包含在查询字符串时GET请求PARAMETER的值。
$args 这个变量等于请求行中的参数。
$binary_remote_addr 二进制码形式的客户端地址。
$body_bytes_sent 请求体字节数
$content_length 请求头中的 Content-length 字段。
$content_type 请求头中的 Content-Type 字段。
$cookie_COOKIE cookie COOKIE的值。
$document_root 当前请求在 root 指令中指定的值。
$document_uri 与$uri 相同。
$host 请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。
$is_args 如果$args设置,值为"?",否则为""。
$limit_rate 这个变量可以限制连接速率。
$nginx_version 当前运行的nginx版本号。
$query_string 与$args相同。
$remote_addr 客户端的 IP 地址。
$remote_port 客户端的端口。
$remote_user 已经经过 Auth Basic Module 验证的用户名。
$request 请求行 (包括方法、路径、协议版本)。
$request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body 这个变量(0.7.58+)包含请求的主要信息。在使用 proxy_pass 或 fastcgi_pass 指令的 location 中比较有意义。
$request_body_file 客户端请求主体信息的临时文件名。
$request_completion 请求完成
$request_method 这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri 这个变量等于包含一些客户端请求参数的原始 URI,它无法修改,请查看$uri更改或重写URI。
$request_time 整个请求的总时间
$upstream_response_time 请求过程中, upstream响应时间
$scheme HTTP 方法(如 http,https)。按需使用,例: rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr 服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name 服务器名称。
$server_port 请求到达服务器的端口号。
$server_protocol 请求使用的协议,通常是 HTTP/1.0 或 HTTP/1.1。
$uri 请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri 的值,它可以通过内部重定向,或者使用 index 指令进行修改。
$status 请求的HTTP状态码,如200、404等。
$http_referer 客户端请求的来源,如果没有,则为空。
$http_user_agent 客户端的浏览器信息,如果没有,则为空。
$http_x_forwarded_for 客户端的IP地址,如果没有,则为空。
$http_Authorization 请求头Authorization,如果没有,则为空。
$http_HEADER 请求头HEADER, 如上
$time_iso8601 生成格式:2023-06-28T17:09:30+08:00
$time_local 生成格式:28/Jun/2023:17:09:30 +0800