Nginx可通过server块独立配置access_log实现按虚拟主机分类存储日志,需显式声明路径与自定义log_format(如含$host),支持map动态映射路径,并需同步配置权限与logrotate。

Nginx 的 access_log 指令支持按虚拟主机(server 块)独立配置日志路径和格式,这是实现请求流量分类存储的核心机制。关键在于每个 server 块内显式声明专属的 access_log,避免继承全局配置,并配合自定义日志格式区分来源。
为每个 server 块单独配置 access_log 路径
在对应虚拟主机的 server{...} 块中,直接写入 access_log 指令,指定唯一路径。Nginx 不会自动合并或覆盖,各站点日志互不干扰。
- 示例:www.example.com 独用
/var/log/nginx/www_access.log - 示例:api.example.com 独用
/var/log/nginx/api_access.log - 若某 server 块未写
access_log,则继承上级(如 http 块)配置;需显式关闭时,用access_log off;
使用 log_format 定义带标识的日志格式
在 http 块中预定义含变量的日志格式(如包含 $host 或 $server_name),再在各 server 块中引用。便于后续用脚本或日志分析工具按域名筛选。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 在 http 块中添加:
log_format vhost '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'; - 各 server 块中写:
access_log /var/log/nginx/www_access.log vhost; - 这样每行日志开头即为请求的 Host 名,无需依赖文件路径即可识别来源
结合 map 指令实现动态日志路径(进阶)
当虚拟主机数量多、路径命名有规律时,可用 map 指令将 $host 映射为日志文件路径,减少重复配置。
- 在 http 块中定义:
map $host $log_path { default "default.log"; www.example.com "www.log"; api.example.com "api.log"; } - 再在 server 块中写:
access_log /var/log/nginx/$log_path main; - 注意:
$log_path必须是合法文件名,避免特殊字符;建议搭配valid_referers或正则 map 过滤非法 host
权限与轮转需同步适配
多个日志文件意味着需为每个路径确保 nginx 工作进程有写入权限,并在 logrotate 配置中分别管理。
- 创建目录并授权:
mkdir -p /var/log/nginx/{www,api} && chown -R nginx:nginx /var/log/nginx - logrotate 配置中,为每个日志文件单独写一段,或使用通配符如
/var/log/nginx/*.log统一轮转 - 轮转后需 reload nginx:
create 0644 nginx nginx+sharedscripts && postrotate nginx -s reload endscript

















