Nginx 默认支持 $ssl_protocol 和 $ssl_cipher 变量,只需在 listen 443 ssl 的 server 块中配置 access_log 并使用自定义 log_format 即可记录 TLS 版本、加密套件、SNI 域名及会话复用状态,无需额外模块;配置后需通过 nginx -t、reload 和 curl 验证生效。

直接在 HTTPS server 块中启用 $ssl_protocol 和 $ssl_cipher 变量写入 access_log 即可,不需要额外模块或编译——只要 Nginx 已启用 SSL 模块(默认包含),且配置了 listen 443 ssl;,这两个变量就能准确记录每次连接实际协商出的 TLS 版本(如 TLSv1.3)和加密套件(如 ECDHE-ECDSA-AES128-GCM-SHA256)。
定义含 TLS 版本与套件的日志格式
在 http{} 块中添加自定义日志格式,例如:
log_format ssl_detail '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$ssl_protocol/$ssl_cipher" "$ssl_server_name" $ssl_session_reused';
- 用斜杠分隔协议与套件,结构清晰、便于解析
-
$ssl_server_name可识别客户端 SNI 域名,适合多站点环境审计 -
$ssl_session_reused显示r(复用)或.(新建),辅助分析握手效率
只在 HTTPS server 块中启用该日志
确保 access_log 指令仅出现在 listen 443 ssl; 的 server{} 块内,例如:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
access_log /var/log/nginx/ssl_access.log ssl_detail;
}
- 不能将
access_log放在http{}或 HTTP 的server{}块中,否则$ssl_*变量为空或显示短横线- - 每个启用 HTTPS 的虚拟主机都需单独配置,不支持跨 server 继承
验证配置是否生效
执行三步检查:
- 运行
nginx -t确认语法无误 - 执行
nginx -s reload重载配置 - 用
curl -k https://example.com发起一次请求,再查看日志文件,应出现类似:
192.168.1.100 - - [13/Oct/2026:06:40:22 +0000] "GET / HTTP/1.1" 200 1234 "TLSv1.3/ECDHE-ECDSA-AES128-GCM-SHA256" "example.com" .
若 $ssl_protocol 或 $ssl_cipher 显示为空或短横线,大概率是 server 块漏写了 ssl 关键字,或 access_log 被错误地放在了非 HTTPS 配置段。










