我正在使用 CentOS Linux 版本 7.0.1406(核心)。
我最后一次登录服务器的 SSH 是在 4 月 20 日。一切正常。
今天我再次登录,检查我的网站的 error.log 中是否有新内容。我定期这样做。但今天有一个惊喜:
[root@myserver nginx]# ls -la
total 104840
drwx------ 2 nginx nginx 4096 Apr 30 03:19 .
drwxr-xr-x 7 root root 4096 May 3 03:20 ..
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 access.log
-rw-r--r-- 1 root root 17956729 Apr 30 03:19 access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 awstats.site1.net.access.log
-rw-r--r-- 1 root root 5229 Apr 2 14:21 awstats.site1.net.access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 awstats.site1.net.error.log
-rw-r--r-- 1 root root 4654 Apr 2 14:21 awstats.site1.net.error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 devel.site1.net.access.log
-rw-r--r-- 1 root root 26082 Apr 20 21:12 devel.site1.net.access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 devel.site1.net.error.log
-rw-r--r-- 1 root root 46743 Apr 20 21:14 devel.site1.net.error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 devel.site2.pl.access.log
-rw-r--r-- 1 root root 1652 Apr 24 06:28 devel.site2.pl.access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 devel.site2.pl.error.log
-rw-r--r-- 1 root root 237 Feb 28 21:32 devel.site2.pl.error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 error.log
-rw-r--r-- 1 root root 596623 Apr 30 02:38 error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site1.net.access.log
-rw-r--r-- 1 root root 83764451 Apr 30 03:18 site1.net.access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site1.net.error.log
-rw-r--r-- 1 root root 147462 Apr 29 21:36 site1.net.error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site3.com-access.log
-rw-r--r-- 1 root root 177285 Apr 30 03:14 site3.com-access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site3.com-error.log
-rw-r--r-- 1 root root 27929 Apr 28 23:16 site3.com-error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 panel.site4.com-access.log
-rw-r--r-- 1 root root 1963 Apr 25 22:22 panel.site4.com-access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 panel.site4.com-error.log
-rw-r--r-- 1 root root 488 Apr 13 14:21 panel.site4.com-error.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site2.pl.access.log
-rw-r--r-- 1 root root 4485845 Apr 30 03:12 site2.pl.access.log-20150430.gz
-rw-r--r-- 1 web nginx 0 Apr 30 03:19 site2.pl.error.log
-rw-r--r-- 1 root root 61613 Apr 30 01:36 site2.pl.error.log-20150430.gz
如您所见,.log 文件为 0KB!但那里有大量数据。它只是……飞走了。
我还注意到last
,出现了一个我不知道的奇怪的重启:
reboot system boot 2.6.32-042stab08 Wed Apr 29 20:41 - 15:09 (8+18:27)
现在我将所有者/组改回nginx
,看起来日志再次填充。
编辑:
Here is my nginx.conf:
user web;
worker_processes 2;
pid /var/run/nginx.pid;
events {
worker_connections 768;
multi_accept on;
}
http {
rewrite_log off;
##
# Basic Settings
##
client_max_body_size 20m;
sendfile off;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
# log_format main '$remote_addr $host $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" "$request_time"';
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /etc/nginx/mime.types;
default_type application/octet-stream;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
##
# Logging Settings
##
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;
##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##
#include /etc/nginx/naxsi_core.rules;
##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
输出如下:ps axu | grep log
root 86 0.0 0.0 34636 848 ? Ss Apr29 0:05 /usr/lib/systemd/systemd-logind
root 541 0.0 0.0 9512 588 ? S Apr29 0:01 dovecot/log
mysql 593 0.6 5.7 1675596 179496 ? Sl Apr29 89:36 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 30100 0.0 0.0 8988 900 pts/1 S+ 20:31 0:00 grep --color=auto log
我有几个问题:
- 我不记得是否有 .gz 文件。但现在有了。我如何/在哪里可以检查是否有某条规则规定应该对每个日志文件进行 gzip 压缩?
- 您认为发生了什么?我还可以检查其他内容来找出该问题的根本原因吗
- 有没有什么办法可以防止将来再次发生这样的事情?
- 有没有什么办法可以恢复消失的日志?
答案1
Gzipping 依赖于日志旋转器¹。尽管此链接适用于 Ubuntu,/etc/logrotate.d/nginx 也适用于 CentOS。要查看可能处理日志的内容:
$ ps axu | grep log
出现的进程之一很可能就是您想要的(例如 rsyslogd)。
发生了什么?根据您的评论,供应商重新启动。要确认:
登录信息(服务提供商可能以 root 身份使用公钥进入)可能会出现在 /var/log 文件中,例如:secure、messages、btmp(使用 lastb 访问)、lastlog(假设您使用不同的帐户,它将显示他们的最后一次登录,否则您将覆盖它)和帐户历史文件可能会显示操作:(~/.bash_history 和其他 ~/.files)。
预防取决于原因。如果是供应商做的,可能不是(但你可以问以后如何得到警告)。
恢复也“可能不会”。我曾见过 nginx 在日志轮换不正确时无法写入日志(日志轮换应包括向 nginx 发送 USR1 信号)。启动时,这可能是初始权限问题。据我所知,默认情况下没有任何东西可以缓冲不可写的日志,它们只是消失了。
¹ 为了方便访问压缩文件:
$ zcat each_file # to see one at a time
$ less *.gz # less will zcat for you. :n and :p for next/previous file
$ zcat *.gz | less # to see all files in one big stream
答案2
问题如下:
user web;
Nginx 需要以用户 nginx 身份运行,所有相关脚本(如 logrotate)也需要这样。除非您确切知道自己在做什么以及所有可能的含义,否则永远不要更改此设置。将其恢复为默认值:
user nginx;