Nginx 不单独生成 HTTP/3 日志,复用 access.log 和 error.log;启用 HTTP/3 后,只要配置了 access_log 且 log_format 包含 $server_protocol,即可记录并归档 HTTP/3 请求。

Nginx 本身不生成独立的“HTTP/3 运行日志”,它复用标准的 access.log 和 error.log 记录所有请求(无论 HTTP/1.1、HTTP/2 还是 HTTP/3),所以无需为 HTTP/3 单独配置日志归档逻辑。归档脚本只需处理通用日志路径,就能覆盖 HTTP/3 流量产生的日志内容。
确认 HTTP/3 日志已正常写入
Nginx 启用 HTTP/3 后,只要 access_log 指令已启用(如 access_log /var/log/nginx/access.log main;),所有匹配的请求(含 QUIC 连接)都会按相同格式记录。可通过以下方式验证:
- 查看日志中是否存在
h3或http/3字段(需在log_format中显式添加$http_upgrade或$server_protocol) - 执行
curl -I --http3 https://your-domain.com后检查 access.log 是否新增条目
归档脚本无需区分协议,但建议增强日志格式识别
若需后续分析 HTTP/3 流量占比,可在 nginx.conf 的 log_format 中加入协议标识:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$server_protocol'; # 输出 HTTP/1.1 / HTTP/2 / HTTP/3这样归档后的 .log 或 .gz 文件里每行都带协议信息,便于 zgrep 'HTTP/3' 快速筛选。
复用标准归档流程即可覆盖 HTTP/3 日志
你现有的每日切割+压缩脚本(如用 kill -USR1 + gzip 方案)或 logrotate 配置,对 HTTP/3 日志完全适用。关键点保持不变:
- 脚本操作
/var/log/nginx/access.log和error.log全局路径 - 确保 Nginx 主进程可接收
USR1信号重建文件句柄(HTTP/3 连接不受影响) - 压缩后保留原始时间戳(如
access.log-20260819.gz),协议无关
清理策略与 HTTP/3 无关,按需保留即可
删除过期归档时,仍按文件修改时间(-mtime +30)或命名日期判断,例如:
find /var/log/nginx/archive -name "access.log-*.gz" -mtime +30 -delete
HTTP/3 日志与其他协议日志混合存储,无需特殊过滤。
不复杂但容易忽略


















