nginx 中配置 access_log 需在 http 块中启用并指定路径与格式,可自定义 log_format 记录真实 ip 等字段,支持在 server 或 location 块中单独开启或关闭,修改后需 nginx -t && nginx -s reload 生效。

在 Nginx 中配置基础的 access_log 很简单,关键是把日志路径、格式和开关位置写对。默认安装后通常已启用,但若要自定义记录内容(比如真实 IP、请求时间、状态码等),就得手动调整。
确认 access_log 是否已启用
Nginx 主配置文件(通常是 /etc/nginx/nginx.conf)里一般在 http 块中已有类似这行:
如果这行被注释(前面有 #)或缺失,访客请求就不会写入 access.log。取消注释或补上即可启用。
指定日志路径与格式名称
access_log 指令的基本语法是:
最常用的是前两个参数。例如:
access_log /var/log/nginx/myapp.log main;-
path:日志文件绝对路径,确保 Nginx 进程(通常是
www-data或nginx用户)有写权限 -
format_name:引用预先定义的日志格式名(如
main、combined),不填则用默认combined
自定义日志格式(可选但推荐)
在 http 块中用 log_format 定义你想要的字段。例如记录真实客户端 IP(处理了反向代理场景):
然后在 access_log 中引用它:
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
常用变量说明:
- $remote_addr:直接连接的客户端 IP(若前端有 CDN 或负载均衡,可能不是真实用户 IP)
-
$http_x_forwarded_for:转发链中的原始 IP(需配合
set_real_ip_from和real_ip_header才可靠) -
$request:完整请求行(如
GET /index.html HTTP/1.1) - $status:HTTP 状态码(200、404、502 等)
- $body_bytes_sent:响应体字节数(不含响应头)
按 server 或 location 单独开启/关闭日志
可以在 server 或 location 块中覆盖全局日志配置。例如只记录 API 请求:
access_log /var/log/nginx/api_access.log main;
}
或者彻底关闭某个路径的日志(节省 I/O):
location = /healthz {access_log off;
}
注意:access_log off 是显式关闭,不是留空或删掉该行。
改完配置后别忘了测试并重载:
nginx -t && nginx -s reload然后访问站点,再用 tail -f /var/log/nginx/access.log 实时查看是否写入新记录。










