windows下nginx默认日志不包含ssl协议版本,需在log_format中添加$ssl_protocol变量;该变量由ngx_http_ssl_module提供,启用https监听并确认模块编译后即可记录tls版本。

Windows 下 Nginx 默认日志格式中不包含 SSL 协议版本(如 TLSv1.2、TLSv1.3),需手动在 log_format 中添加 $ssl_protocol 变量才能记录。
确认 Nginx 支持 $ssl_protocol 变量
该变量由 ngx_http_ssl_module 提供,Windows 版本的 Nginx(官方编译版或 Tengine 等衍生版)只要启用了 SSL 模块且使用了 HTTPS server 块,即可正常使用。检查方式:
- 运行
nginx -V 2>&1 | findstr "ssl",确认输出含--with-http_ssl_module - 确保配置中有
listen 443 ssl;或类似 HTTPS 监听项
在 log_format 中加入 $ssl_protocol
编辑 nginx.conf,在 http 块中定义或修改日志格式,例如:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$ssl_protocol $ssl_cipher $request_time';注意:$ssl_protocol 在非 HTTPS 请求中值为空字符串,不会报错,但日志中会显示为“-”或空字段(取决于其他字段分隔方式)。
验证日志是否生效
完成配置后执行以下步骤:
- 保存配置,运行
nginx -t检查语法 - 重载配置:
nginx -s reload - 用浏览器或 curl 访问 HTTPS 地址(如
curl -k https://localhost) - 查看
access.log,确认每行末尾出现类似TLSv1.2或TLSv1.3的字段
常见问题处理
若日志中该字段始终为空,可能原因包括:
- 请求实际走的是 HTTP(端口 80),未触发 SSL 握手 → 检查客户端是否访问 HTTPS 地址
- 反向代理场景下,Nginx 作为后端(即 upstream 是 HTTPS),自身未终止 SSL →
$ssl_protocol仅在 Nginx 终止 SSL 时有效 - 旧版 Nginx(










