- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
Nginx 主要支持两种类型的日志:
访问日志 (Access Logs):记录每个 HTTP 请求的详细信息。
错误日志 (Error Logs):记录服务器运行过程中遇到的错误信息。
默认情况下,Nginx 的日志文件通常位于 /var/log/nginx/
目录下,但你可以在配置文件中自定义日志的位置和格式。
全局配置:在 http
或 main
块中设置全局的日志路径:
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
虚拟主机配置:你也可以在每个 server
块中为不同的虚拟主机指定单独的日志文件:
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
你可以自定义访问日志的格式,以包含更多或更少的信息。常用的日志格式定义如下:
默认格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
自定义格式:例如,添加客户端 IP 和请求时间戳到日志中:
log_format custom '$remote_addr - $remote_user [$time_local] '
'client:$http_x_real_ip, request_time:$request_time '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
然后在需要的地方使用这个自定义格式:
access_log /var/log/nginx/access.log custom;
为了防止日志文件过大影响性能,通常会配置日志轮转策略。Linux 系统中常见的日志轮转工具是 logrotate
。
配置 logrotate
:创建或编辑 /etc/logrotate.d/nginx
文件来配置日志轮转规则:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
/etc/logrotate.d/nginx
文件用于配置 Nginx 日志的轮转策略,确保日志文件不会无限增长,并且可以通过压缩和归档来节省磁盘空间。
路径匹配
/var/log/nginx/*.log
:指定要轮转的日志文件模式。这里的 *.log
表示所有扩展名为 .log
的文件,即包括访问日志(access.log
)和错误日志(error.log
)。
daily
:表示每天进行一次日志轮转。你可以根据需要更改为 weekly
或 monthly
。
missingok
:如果指定的日志文件不存在,不报错并继续执行其他操作。这在日志文件可能被删除或重命名的情况下非常有用。
rotate 14
:保留最近 14 次的日志文件副本。旧的日志文件会被删除以释放磁盘空间。你可以根据实际需求调整这个数字。
compress
:对轮转后的旧日志文件进行压缩(通常使用 gzip)。这有助于减少磁盘占用。
delaycompress
:延迟压缩,即在下一次轮转时才压缩上一次轮转的日志文件。这确保了当前的日志文件不会立即被压缩,方便实时查看。
notifempty
:如果日志文件为空,则不进行轮转。这避免了创建不必要的空日志文件。
create 0640 www-data adm
:创建新的日志文件时,设置其权限为 0640
(读写权限仅限于文件所有者和组),文件所有者为 www-data
,所属组为 adm
。这对于确保日志文件的安全性和可访问性非常重要。
sharedscripts
:如果多个日志文件匹配相同的配置规则,那么 postrotate
和 endscript
中的脚本只会运行一次。这对于避免重复执行命令很有帮助。
postrotate ... endscript
:这部分定义了在每次日志轮转之后要执行的命令。具体来说:
if [ -f /var/run/nginx.pid ]; then
:检查是否存在 Nginx 主进程的 PID 文件。
kill -USR1 \\
cat /var/run/nginx.pid\\`:向 Nginx 发送
USR1` 信号,指示它重新打开日志文件,从而开始写入新的日志文件。这是确保日志轮转生效的关键步骤。
假设今天是 2024 年 12 月 30 日,Nginx 日志轮转会在午夜触发。以下是具体的流程:
检查和轮转:
如果 /var/log/nginx/access.log
和 /var/log/nginx/error.log
存在并且非空,则将它们重命名为带有日期戳的文件,例如 access.log.1
和 error.log.1
。
压缩旧日志:
昨天的日志文件(如 access.log.1
和 error.log.1
)会被压缩成 .gz
格式,但今天的日志文件(如 access.log
和 error.log
)暂时不会被压缩。
创建新日志文件:
创建新的 access.log
和 error.log
文件,并设置权限为 0640
,所有者为 www-data
,所属组为 adm
。
通知 Nginx:
向 Nginx 发送 USR1
信号,让其重新打开新的日志文件。
清理过期日志:
删除超过 14 天的日志文件,以释放磁盘空间。
实时查看日志:使用 tail
命令可以实时查看最新的日志条目:
tail -f /var/log/nginx/access.log
搜索特定内容:使用 grep
或 awk
等工具查找特定的请求或错误:
grep "404" /var/log/nginx/access.log
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
使用日志分析工具:对于大规模日志分析,可以考虑使用专业的日志分析工具如 GoAccess、ELK Stack(Elasticsearch, Logstash, Kibana)、Graylog 等。
有时你需要更详细的错误信息来解决问题。可以通过修改错误日志级别来启用更详细的日志输出:
error_log /var/log/nginx/error.log debug;
这将使 Nginx 记录更多的调试信息,但请注意,生产环境中应避免长期使用 debug
级别,因为它会产生大量日志并可能影响性能。
总之,Nginx 日志是运维人员了解服务器运行状态的关键窗口。通过合理配置日志,运用日志轮转策略,熟练使用查看与分析工具,以及在必要时调整日志级别,我们能更高效地保障 Nginx 稳定运行。蓝队云作为技术支持的坚实后盾,拥有丰富资源与工具,期待与大家携手攻克更多技术难题,助力 Web 服务蓬勃发展。
售前咨询
售后咨询
备案咨询
二维码
TOP