在 location 块中做日志脱敏,核心是不依赖全局 log_format,而是按需启用定制化脱敏日志格式,适用于敏感接口、静态资源或管理路径等特定场景,比全局配置更精准,避免“一刀切”影响其他流量的调试价值。
在 location 块中做日志脱敏,核心是不依赖全局 log_format,而是按需启用定制化脱敏日志格式,适用于敏感接口、静态资源或管理路径等特定场景。它比全局配置更精准,避免“一刀切”影响其他流量的调试价值。
先在 http 块中定义一个专用于脱敏的 log_format(如 secure_static 或 admin_audit),再在目标 location 内用 access_log 显式调用它:
log_format 已使用 map 预处理了敏感字段(如 $sanitized_args、$masked_phone、$anonymized_ip)location 中直接绑定,不加 if 或条件判断,Nginx 会自动生效access_log /var/log/nginx/user_avatar.log secure_static;
# 其他 proxy_pass 或 alias 配置...
}
对于需鉴权的后台接口(如 /api/v1/users),可在 location 中同时启用权限拦截与审计日志:
auth_request /auth 转发鉴权请求,Nginx 不接触原始凭证$http_x_user_id 已由后端掩码)、或用 map 从 $request_uri 提取并掩码目标 ID$args,改用预处理后的 $sanitized_args
location 级别无法直接控制 error_log 内容,但可通过以下方式阻断敏感数据进入:
location,启用 proxy_intercept_errors on + 自定义 error_page,屏蔽后端原始错误体proxy_set_header 透传 $request_body 或 $http_authorization,防止后端异常堆栈带出明文密码debug 级别日志,也不用 echo、log_subrequest 等可能暴露参数的模块针对私有文件(PDF、合同等),常搭配 internal 指令使用,此时日志只需记录行为,无需原始参数:
location /private/ { internal; alias /data/private/; }
$args 和 $http_cookie,只保留 $remote_addr、$time_local、$uri、$status
/private/u_138****1234_contract.pdf),可用 map 提前提取并掩码