Nginx可通过$cookie_*和$http_*变量捕获Cookie及Token类请求头并写入自定义日志,但需用map指令处理含短横线或大写字母的字段,并对敏感值脱敏(如截取前8位),配置需放在http块中且版本不低于1.11.6。

在 Nginx 中,可以通过 $cookie_* 和 $http_* 变量在自定义日志格式中捕获 Cookie 或 Token(如 Authorization Header、X-Auth-Token 等),但需注意隐私合规与安全风险——不建议直接记录敏感凭证。
捕获 Cookie 值(如 session_id、user_token)
Nginx 会自动将请求中的 Cookie 解析为以 $cookie_ 开头的变量,名称需转为下划线小写(如 Session-ID → $cookie_session_id)。
- 在
http或server块中定义日志格式,例如:
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'cookie_session="$cookie_session_id" '
'cookie_uid="$cookie_uid"- 若 Cookie 名含大写字母或短横线(如
X-User-Token),Nginx 不会自动创建对应变量;此时可先用map指令提取:
map $http_cookie $cookie_x_user_token {
~*x-user-token=([^;]+) $1;
}然后在 log_format 中使用 $cookie_x_user_token。
捕获 Token 类 Header(如 Authorization、X-Auth-Token)
Token 通常放在请求头中,Nginx 将所有 HTTP 请求头映射为 $http_* 变量,规则是:头名转为小写、短横线变下划线。
-
Authorization: Bearer abc123→ 可用$http_authorization -
X-Auth-Token: xyz789→ 可用$http_x_auth_token - 在日志格式中直接引用即可,例如:
log_format custom '... auth_token="$http_x_auth_token" '
'auth_header="$http_authorization"'⚠️ 注意:$http_authorization 会完整记录 Bearer Token,存在泄露风险,生产环境应避免记录或仅记录前缀(见下文)。
TokenGX Cap 验证码【代码集成】技能 —— 面向开发场景,提供前端组件和后端验证的代码模板,帮助用户将 Cap 无感验证码快速集成到网站或应用中。适用场景:注册登录防刷、表单提交保护、API 接口防爬、发短信/邮件防滥用等。支持前端(HTML/React/Vue/Next.js)和后端(Node.js/Python/PHP/Go)全栈集成。触发词:集成验证码、添加人机验证、CAPTCHA 集成、cap widget、验证码前端、验证码后端、防刷表单等。与 tokengx-cap-admin(服务
安全处理:脱敏敏感字段
直接记录完整 Token 违反最小权限原则,推荐做截断或哈希处理(Nginx 本身不支持哈希,但可用 map + 正则截取):
- 只记录 Token 前 8 位 + 星号(适用于调试):
map $http_authorization $safe_auth {
~*Bearer\s+(.{8}).* "$1****";
default "-";
}然后在日志中使用 $safe_auth。类似方法可用于 $cookie_token 等。
启用并验证日志配置
- 将
log_format放在http块中,再在server或location中指定access_log /path/to/log custom; - 重载配置:
nginx -t && nginx -s reload - 用
curl -H "Cookie: session_id=abc123; uid=456" http://your-site/测试,检查日志输出是否包含对应字段
不复杂但容易忽略:确保 Nginx 版本 ≥ 1.11.6(map 模块稳定支持),且 Cookie/Token 字段名拼写准确(区分大小写、下划线转换)。










