apache默认使用clf,但combined格式更常用,因其额外包含referer和user-agent字段;配置需先用logformat定义别名,再用customlog引用,支持自定义变体与验证调试。

Apache 默认使用 Common Log Format(CLF),但 Combined 格式更常用,因为它额外包含 Referer 和 User-Agent 字段,对流量来源和终端设备分析很有价值。配置的关键是两步:先用 LogFormat 定义格式别名,再用 CustomLog 指定日志文件并引用该别名。
理解 Combined 格式的字段含义
Combined 是 Apache 预定义的常用扩展格式,其标准定义为:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
其中各占位符代表:
-
%h:客户端真实 IP(注意:若前端有代理,需配合
%{X-Forwarded-For}i使用) - %l:RFC 1413 身份识别(通常为“-”,不建议开启 IdentityCheck)
- %u:经过认证的用户名(未认证时为“-”)
-
%t:请求时间,格式如
[18/Jun/2026:01:30:45 +0800] -
%r:原始请求行,例如
"GET /index.html HTTP/1.1" - %>s:最终响应状态码(区别于 %s,它反映内部重定向后的结果)
- %b:响应体字节数(不含响应头;若为 0 则记作“-”)
- %{Referer}i:上一页 URL(即用户从哪个页面跳转而来)
- %{User-Agent}i:客户端浏览器或爬虫标识字符串
在配置文件中启用 Combined 格式
编辑主配置文件(如 /etc/apache2/apache2.conf 或 /usr/local/apache2/conf/httpd.conf),确保以下内容存在且未被注释:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog ${APACHE_LOG_DIR}/access.log combined
说明:
-
LogFormat行只需写一次,放在<ifmodule log_config_module></ifmodule>块内更规范 -
CustomLog可全局设置,也可在<virtualhost></virtualhost>中单独指定,实现不同站点不同日志路径 - 若想同时记录响应头大小,可改用
%O替代%b(表示总输出字节数)
基于 Combined 的常见自定义变体
实际运维中常需增强 Combined,例如加入处理耗时、虚拟主机名或请求协议:
-
带响应时间(微秒):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_with_time -
区分 HTTP/HTTPS 和域名:
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined(%v 是 ServerName,%p 是端口) -
精简版(仅 URL + 状态 + IP):
LogFormat "%h \"%r\" %>s" url_status_ip,适合快速排查
定义后,用对应别名调用 CustomLog 即可生效,无需重启,reload 即可加载新配置。
验证与调试技巧
配置完成后,推荐三步确认是否生效:
- 运行
apache2ctl -t(Debian/Ubuntu)或httpd -t(RHEL/CentOS)检查语法 - 执行
tail -f /var/log/apache2/access.log并发起一次请求(如curl -I http://localhost),观察日志是否按预期格式输出 - 若 Referer 或 User-Agent 显示为“-”,说明请求本身未携带这些头(如直接地址栏访问无 Referer,curl 默认无 UA),属正常现象









