nginx 默认通过 $http_user_agent 变量记录浏览器类型,需确保 log_format 中包含该字段;若未显示,可能因客户端未发送、变量拼写错误或 access_log 未启用;可用 map 指令预分类 ua,但解析需日志采集后处理。

Nginx 默认就能记录客户端浏览器类型,关键在于日志格式中是否包含 $http_user_agent 变量。
这个变量直接提取 HTTP 请求头中的 User-Agent 字段,内容就是浏览器标识字符串,比如:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
只要你的 log_format 里有它,access_log 就会如实写入。
确认是否已启用
检查 Nginx 配置中 log_format 的定义。默认的 main 格式通常已包含该字段:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
注意末尾的 "$http_user_agent" —— 这就是浏览器类型所在位置。
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
如果没显示或显示为空
- 客户端确实未发送
User-Agent头(极少见,但某些脚本或工具可能省略) - 日志格式写错,比如漏了引号、拼写成
$http_useragent(正确是_下划线) - 使用了
access_log off;或未在对应server/location块中调用该log_format
想提取更清晰的浏览器信息
Nginx 本身不解析 User-Agent 字符串,但你可以:
- 在日志采集后用 Logstash、Fluentd 或 Python 脚本做 UA 解析(识别 Chrome/Firefox/iPhone/Android 等)
- 若需在 Nginx 层简单分类,可用
map指令预定义标签:
map $http_user_agent $browser_type {
default "unknown";
"~*msie|trident" "ie";
"~*firefox" "firefox";
"~*chrome" "chrome";
"~*safari.*mobile" "ios_safari";
"~*safari" "mac_safari";
}
然后在 log_format 中加入 $browser_type 即可。
生产环境小提醒
-
User-Agent字段较长,可能影响单行日志体积,建议搭配buffer=16k或gzip使用 - 不要依赖它做安全判断(可被轻易伪造)
- 若启用了代理,确保
proxy_set_header User-Agent $http_user_agent;未被覆盖,否则后端或日志可能拿到的是代理自身的 UA
不需要额外模块或重启服务,改完配置 reload 即可生效。










