需在443 ssl server块中启用$ssl_protocol和$ssl_cipher变量,配合自定义log_format tls_audit格式记录tls版本、加密套件等信息,并确保ssl证书、协议配置正确且日志路径可写。

要在 Nginx 中准确记录 TLS 协议版本和加密套件,核心是启用并正确使用 $ssl_protocol 和 $ssl_cipher 这两个变量——它们只在真实 HTTPS 连接中由 Nginx 自动填充,反映客户端与服务器最终协商出的实际参数,不是配置声明,而是运行时结果。
必须限定作用域:仅在 443 ssl server 块中生效
这两个变量无法在 HTTP(80 端口)或未启用 SSL 的块中使用。否则日志中对应字段为空或显示短横线(-)。确保 server 块包含:
-
listen 443 ssl http2;(ssl关键字不可省略) - 已配置
ssl_certificate和ssl_certificate_key - 禁用旧协议:
ssl_protocols TLSv1.2 TLSv1.3;
定义专用日志格式,结构清晰便于解析
在 http{} 块中添加自定义格式,推荐用竖线分隔,避免空格干扰后续分析:
其中:
-
$ssl_protocol输出如 TLSv1.3 或 TLSv1.2 -
$ssl_cipher输出如 ECDHE-ECDSA-AES128-GCM-SHA256 -
$ssl_server_name是客户端通过 SNI 发送的域名,可用于识别多租户或泛域名访问
绑定日志到 HTTPS server 并检查权限
在对应 443 server 块内启用:
access_log /var/log/nginx/tls-audit.log tls_audit;注意:
- 确保
/var/log/nginx/目录存在,且 nginx worker 进程(如用户 nginx 或 www-data)对该路径有写权限 - 不要复用
combined或其他 HTTP 日志格式,防止语义混淆 - 不建议将同一
access_log指令同时用于 HTTP 和 HTTPS server 块
验证是否真正生效
完成配置后执行:
-
nginx -t检查语法 -
nginx -s reload重载配置 - 用
curl -I https://yoursite.com或浏览器访问一次 - 查看日志文件是否出现类似:
2026-09-15T16:45:22+00:00|203.0.113.45|TLSv1.3|ECDHE-RSA-AES256-GCM-SHA384|example.com|GET|/|200|1248|0.023|"curl/8.10.1"
若字段全为空或为“-”,大概率是 server 块漏写了 ssl,或日志指令错放在了 80 端口配置里。











