跳到主要内容

Nginx 不同场景的 log format 示例

· 阅读需 1 分钟
素明诚
Full stack development

基本访问日志

用于常规的访问监控,记录关键的请求与响应信息。

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

性能分析日志

用于评估请求处理性能,重点关注响应时间。

log_format performance '$time_iso8601|$remote_addr|$request_time|$upstream_response_time|'
'$status|$request|$body_bytes_sent';

安全审计日志

记录与安全相关的额外信息,如 SSL/TLS 参数等。

log_format security '$time_iso8601|$remote_addr|$remote_user|$request|'
'$status|$body_bytes_sent|$http_referer|$http_user_agent|'
'$ssl_protocol|$ssl_cipher|$http_x_forwarded_for';

API 日志

针对 API 请求的专用日志格式,关注认证 token、payload 大小等内容。

log_format api '$time_iso8601|$remote_addr|$request_method|$uri|$server_protocol|'
'$status|$request_time|$http_x_api_token|$content_length';

调试日志

在排查故障时使用,记录尽可能详尽的信息。通常无需一直启用。

log_format debug '$time_iso8601|$remote_addr|$remote_user|$request|'
'$status|$body_bytes_sent|$http_referer|$http_user_agent|'
'$request_time|$upstream_response_time|$upstream_addr|'
'$ssl_protocol|$ssl_cipher|$http_x_forwarded_for|$host|$https';

在配置中使用日志

下面是一个在生产环境可用的完整示例

http {
log_format main '...';
log_format performance '...';
log_format security '...';
log_format api '...';
#log_format debug '...';

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

server {
listen 80;
server_name example.com;

location /api {
access_log /var/log/nginx/api.log api;
# ...
}

location /debug {
access_log /var/log/nginx/debug.log debug;
# ...
}
}
}

开发日常使用

  log_format backend_log '$time_local|$remote_addr|$http_x_forwarded_for|$remote_user|'
'$request_method|$request_uri|$server_protocol|$http_host|'
'$status|$body_bytes_sent|$request_time|$upstream_response_time|'
'$upstream_addr|$upstream_status|$http_referer|$http_user_agent|'
'$request_id';