Nginx 日志格式怎么自定义才能记录请求头里的 User-Agent?
我在用 Nginx 做前端项目的反向代理,想在 access_log 里加上请求的 User-Agent,但改了配置后日志没变化,是不是哪里写错了?
我试过在 http 块里加了个 log_format,然后在 server 里用了 access_log 指向这个格式,但重启 Nginx 后日志还是默认的,没看到 User-Agent 字段。
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log custom;
...
}
log_format 只能在 http 块里定义,不能放在 server 块里。你的配置里 log_format 写在 server 外部但没有明确在 http 块中,这样 Nginx 根本不认识这个格式定义。
正确的写法应该是这样:
还有一个可能的原因:即使配置写对了,你得用
nginx -s reload重载配置,不能用 restart 就完事了。reload 会让 Nginx 重新读取配置并应用新的日志格式。另外提醒一下,
$http_user_agent这个变量记录的是请求头里的 User-Agent,Nginx 会自动从 HTTP 请求头里取这个值,不需要额外配置。你检查一下你的 log_format 是不是真的放在 http 块里面了?有时候配置文件结构不对,Nginx 不会报错,但那个格式根本不会生效。