Apache 通过 mod_unique_id 模块为每次 HTTP 请求生成全局唯一、不可预测的加密哈希字符串(如 W23xQn8AAQEAAC9sK4gAAAAF),用于日志追踪与链路关联,该 ID 与用户会话无关,仅作用于单次请求生命周期。

Apache 本身不为每个 HTTP 会话生成唯一 ID,但可以通过 mod_unique_id 模块配合 mod_log_config 实现每请求级唯一标识(注意:是“每次请求”而非传统 Web 应用中基于 Cookie/Session 的“用户会话”)。这个 ID 在请求生命周期内稳定,适合日志追踪、链路关联等场景。
启用 mod_unique_id 是前提
该模块为每个请求生成一个加密哈希字符串(如 W23xQn8AAQEAAC9sK4gAAAAF),全局唯一且不可预测。它不是 Java 的 HttpSession,也不依赖客户端状态。
- 确认已加载:
httpd -M | grep unique_id # 或 Debian/Ubuntu: a2enmod unique_id && systemctl reload apache2
- 配置文件中确保有:
LoadModule unique_id_module modules/mod_unique_id.so
在日志中记录 UNIQUE_ID
使用 %{UNIQUE_ID}e 格式符(e 表示 environment variable):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{UNIQUE_ID}e" combined_with_id
CustomLog /var/log/apache2/access.log combined_with_id日志行示例:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
192.168.1.100 - - [01/May/2026:09:15:22 +0000] "GET /api/data HTTP/1.1" 200 124 "-" "curl/8.7.1" W23xQn8AAQEAAC9sK4gAAAAF
注意事项与常见问题
-
%{UNIQUE_ID}e只在mod_unique_id启用后才有效;未启用时该字段为空或报错。 - 该 ID 是请求级的,同一浏览器多次刷新会生成不同 ID;不等同于用户会话(session)。若需关联用户行为,需 Java 后端通过
X-Request-ID响应头回传,并在 Apache 日志中用%{X-Request-ID}o记录(需后端主动设置)。 - 不要混淆
%{UNIQUE_ID}e和%{REQUEST_ID}e:后者不是 Apache 原生变量,需由mod_headers或 CGI 脚本手动设置。 - 若使用反向代理(如 Nginx → Apache),确保
mod_remoteip已配置,否则%h可能显示代理 IP,但UNIQUE_ID不受影响。
与 Java 应用协同建议
Java 侧(如 Spring Boot)可生成并透传请求 ID:
- 使用
Filter设置X-Request-ID响应头; - Apache 配置中加入:
LogFormat "... %{X-Request-ID}o" combined_with_java_id这样日志中就能同时看到 Apache 生成的
UNIQUE_ID和 Java 生成的业务 ID,便于跨层排查。
不复杂但容易忽略。

















