apache默认combined日志不记录完整url,需通过logformat组合%{https}e、%{http_host}i和%{request_uri}i等变量手动拼接实现,例如logformat "%{https}e://%{http_host}i%{request_uri}i %t \"%r\" %>s %b" fullurl,并用customlog启用。

Apache 默认日志(如 combined 格式)只记录请求行中的路径部分(%r 中的 URI),不包含协议(http:// 或 https://)、主机名、端口等信息,因此不会记录完整 URL(如 https://www.example.com:443/path?query=1)。要记录完整 URL,需手动拼接关键字段。
✅ 记录完整 URL 的核心思路
完整 URL = 协议 + 主机名 + 端口(非标准时) + 请求路径(含查询参数)
Apache 本身没有 %U 或 %URL 这类单变量,但可通过组合以下变量实现:
-
%H:协议(HTTP/1.1、HTTP/2 等)→ 不能直接得http或https -
%{HTTPS}e:环境变量,值为on(HTTPS)或空(HTTP)→ 推荐用这个判断协议 -
%{HTTP_HOST}i:请求头中的Host字段(含端口,如example.com:8080) -
%{REQUEST_URI}i:原始请求 URI(含 query string,如/path?a=1)
⚠️ 注意:
%{HTTP_HOST}i取自请求头,可能被客户端伪造;若需绝对可靠,应结合ServerName和监听端口逻辑判断,但日常日志记录中HTTP_HOST已足够实用。
✅ 配置步骤(以 httpd.conf 或虚拟主机配置为例)
-
定义自定义日志格式
在配置文件中添加(位置不限,通常放在<virtualhost></virtualhost>外或内):
LogFormat "%{HTTPS}e://%{HTTP_HOST}i%{REQUEST_URI}i %t \"%r\" %>s %b" fullurl
说明:
-
%{HTTPS}e输出on或空 → 我们约定:on→https://,空 →http:// -
%{HTTP_HOST}i包含域名和端口(如api.example.com:8080) -
%{REQUEST_URI}i包含路径和查询参数(如/users?id=123) -
%t和%r等保留用于调试参考(可选)
? 如果你希望更严谨地还原协议(例如支持 HTTP/2 不依赖 HTTPS 环境变量),可用
%{HTTP:X-Forwarded-Proto}i(适用于反向代理场景),但需确保上游代理设置了该头。
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
启用并应用该格式到日志文件
例如:
CustomLog "/var/log/apache2/access_fullurl.log" fullurl
或在 <virtualhost></virtualhost> 内指定:
<virtualhost>
ServerName example.com
CustomLog "/var/log/apache2/example_full.log" fullurl
</virtualhost><virtualhost>
ServerName example.com
SSLEngine on
CustomLog "/var/log/apache2/example_full.log" fullurl
</virtualhost>
-
重启 Apache 生效
sudo systemctl restart apache2 # Debian/Ubuntu # 或 sudo systemctl restart httpd # CentOS/RHEL
✅ 示例日志输出效果
请求:GET https://api.example.com:443/v1/users?limit=10 HTTP/2
对应日志行类似:
https://api.example.com:443/v1/users?limit=10 [11/Jun/2026:23:05:12 +0800] "GET /v1/users?limit=10 HTTP/2" 200 1245
✅ 注意:
%{REQUEST_URI}i已含 query string,无需额外拼接%q;且它保留原始编码(如%20),符合 URL 完整性要求。
❗ 常见问题提醒
- 若网站前端有 Nginx 或 CDN,
%{HTTP_HOST}i和%{HTTPS}e可能不准确 → 改用X-Forwarded-Host和X-Forwarded-Proto(需代理透传) - 日志体积会明显增大(尤其带长 query string 的 API 请求)→ 建议单独开日志文件,避免冲刷主访问日志
- 不建议在生产环境对所有请求开启此格式作为默认日志,仅按需启用
不复杂但容易忽略细节。











