Nginx 日志主要分为 访问日志(access_log) 和 错误日志(error_log),可以在 nginx.conf 或各个 server {} / location {} 中配置。下面按常见场景说明。
记录每一次请求的访问信息(IP、时间、URL、状态码等)
记录错误、警告、调试信息
http {
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 访问日志
access_log /var/log/nginx/access.log main;
# 错误日志(级别:debug | info | notice | warn | error | crit | alert | emerg)
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
error_log file level;
| 级别 | 说明 |
|---|---|
| debug | 调试信息(需要编译时开启 debug) |
| info | 一般信息 |
| notice | 注意信息 |
| warn | 警告 |
| error | 错误(默认) |
| crit | 严重错误 |
✅ 生产环境建议
error_log /var/log/nginx/error.log error;
server {
listen 80;
server_name a.example.com;
access_log /var/log/nginx/a_access.log main;
error_log /var/log/nginx/a_error.log warn;
}
server {
listen 80;
server_name b.example.com;
access_log /var/log/nginx/b_access.log main;
error_log /var/log/nginx/b_error.log error;
}
access_log off;
error_log /dev/null;
⚠️ 生产环境不建议完全关闭,至少保留 error_log。
Nginx 不会自动按天切割日志,一般配合 logrotate:
/etc/logrotate.d/nginx
示例:
/var/log/nginx/*.log {
daily
rotate 30
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
nginx -s reload
endscript
}
| 变量 | 含义 |
|---|---|
$remote_addr |
客户端 IP |
$time_local |
本地时间 |
$request |
请求行 |
$status |
HTTP 状态码 |
$body_bytes_sent |
响应体大小 |
$http_user_agent |
UA |
$http_x_forwarded_for |
代理真实 IP |
nginx -t
nginx -s reload
如果你有具体需求(比如 只记录 404、按接口分日志、JSON 格式、Docker / K8s 场景),可以直接告诉我,我给你定制配置。