Nginx 日志格式怎么自定义才能记录请求头?

园园 阅读 68

我用 Nginx 做前端静态资源服务器,想在 access.log 里记录每个请求的 User-Agent 和 Referer,但改了配置后日志没变化,是不是哪里写错了?

我试过在 http 块里加 log_format,然后在 server 里用 access_log 指向它,但重启 Nginx 后日志还是默认格式。下面是我的配置:

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;
    ...
}
我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
UE丶雨童
你的配置看起来没问题,但有时候 Nginx 的配置文件里有个小坑,就是可能会有多条 access_log 指令,或者默认的日志格式覆盖了你的自定义格式。检查一下你的 server 块里有没有其他 access_log 指令,确保只有一条指向你自定义的 custom 格式。

另外,确认一下 http 块里的 log_format 定义是否在所有 server 块之前。有时候顺序也会影响配置生效。

优化一下,你可以试试在 nginx.conf 里找找重复的 access_log 配置,确保只有一条指向 custom 格式的日志记录。重启 Nginx 后,再看看日志文件。
点赞
2026-03-22 16:04
Tr° 怡平
看起来你的配置没啥问题,不过有时候 Nginx 配置文件的语法检查可能会有问题。你先检查一下 Nginx 配置文件的语法对不对,可以用这个命令:

nginx -t


确保没有报错。如果没问题,重启 Nginx:

sudo systemctl restart nginx


或者

sudo service nginx restart


然后清空旧的日志文件或者等新的日志条目生成,看看是不是生效了。拿去改改。
点赞
2026-03-20 18:06