在nginx中,为每个server块单独配置access_log指令即可实现按域名分离日志;需确保server_name唯一、使用绝对路径,并可配合log_format添加host字段;location内配置会覆盖server级设置;最后须验证语法、重载配置并检查目录权限。

在 Nginx 中,通过为每个 server 块单独配置 access_log 指令,就能让不同域名的日志写入各自独立的文件,无需额外模块或复杂判断。
每个 server 块配专属 access_log
最直接有效的方式:在每个基于域名的 server 块内,显式声明 access_log 路径。Nginx 会自动按该配置记录访问日志,互不干扰。
- 确保每个
server块都有唯一的server_name(如example.com、api.example.com) - 在该块内写入
access_log /var/log/nginx/example.com.access.log; - 路径建议用绝对路径,避免因工作目录变化导致写入失败
配合 log_format 实现结构化记录
若需在日志中体现域名信息(比如统一用一个日志轮转工具管理),可自定义日志格式,并在每条日志开头标记 host:
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
- 在
http块中定义:log_format domain_log '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'; - 各
server块中使用:access_log /var/log/nginx/example.com.access.log domain_log; - 这样即使日志路径不同,内容也自带域名上下文,排查时更直观
注意 location 块中的覆盖行为
access_log 指令可出现在 http、server、location 三个层级,且低层级会覆盖高层级配置:
- 如果某个
location块里写了access_log off;,则该路径下请求不会记入server级日志 - 若在
location中又指定了新路径(如access_log /var/log/nginx/api.log;),那这部分请求将只写入该文件,不进主域名日志 - 日常配置中,除非有特殊需求(如只记录 API 接口),否则建议只在
server级设置,保持清晰
验证与权限检查
配置完别忘了验证和测试:
- 运行
nginx -t确保语法正确 - 重载配置:
nginx -s reload - 确认日志目录存在且 Nginx 工作进程(通常是
www-data或nginx用户)有写入权限:sudo mkdir -p /var/log/nginx && sudo chown nginx:nginx /var/log/nginx - 发起一次请求后,用
tail -f /var/log/nginx/xxx.access.log实时查看是否写入










