Nginx开启访问日志需先在http块中定义log_format(如myformat),再在http/server/location块中用access_log指定日志路径与格式名,并确保目录权限正确、配置验证后重载。

在 Nginx 配置中开启访问日志并指定格式,核心是两步:定义日志格式(log_format)和启用日志记录(access_log)。这两条指令必须配合使用,且 log_format 要放在 http 块内,access_log 可放在 http、server 或 location 块中。
定义自定义日志格式
在 http 块顶部或合适位置添加 log_format 指令,给格式起一个名字(如 myformat),后跟用引号包裹的变量组合:
- 变量如
$remote_addr、$time_local、$request、$status、$body_bytes_sent等可直接嵌入 - 支持空格、中括号、双引号等普通字符,注意用单引号包裹整个字符串防止 shell 解析出错
- 名字不能重复,且后续
access_log中需准确引用该名字
示例:
log_format myformat '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';启用并指向日志文件
在需要记录日志的作用域(如某个 server 块)中添加 access_log 指令:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 第一个参数是日志文件的绝对路径,例如
/var/log/nginx/myapp-access.log - 第二个参数是前面定义的格式名,如
myformat;若省略则使用默认combined格式 - 可选参数包括
buffer=16k(启用内存缓冲)、flush=10s(超时刷盘)、gzip(压缩写入)等
示例:
access_log /var/log/nginx/myapp-access.log myformat buffer=16k flush=10s;确保目录与权限可用
Nginx 工作进程(通常是 www-data 或 nginx 用户)必须对日志路径有写权限:
- 确认父目录存在,例如运行
sudo mkdir -p /var/log/nginx - 设置属主和权限:
sudo chown nginx:nginx /var/log/nginx(根据实际用户调整) - 避免将日志写入根目录或无写权限路径,否则启动会报错或静默失败
验证配置并重载
修改完成后务必检查语法并重载服务:
- 执行
sudo nginx -t验证配置是否合法 - 若通过,运行
sudo nginx -s reload生效新配置 - 随后访问站点,再用
tail -f /var/log/nginx/myapp-access.log查看实时日志输出

















