nginx自动保存的日志在有些时候的确是很有用的,在网络服务出问题排查故障,或者是查找特定的访问记录时会很有帮助。nginx的日志通常会保存在/var/log/nginx/路径下面。如果是通过apt等包管理自动安装的nginx等,会自动开启日志轮转功能,即自动保留14天以内的日志,其中前两天是以文件的形式,后面的则进行自动压缩,这样一来就不会使服务器存储空间快速耗尽。

如果访问量比较小而且服务比较少可以直接去access.log文件捞取默认日志,如果站点比较多,还可以进行分类存放,这是比较方便的。

如果nginx后面的服务过多,直接查看文本文件也不会十分方便,这时候可以通过使用一些简单的工具进行可视化展示。goaccess是比较好的一个了。

它自己是这样介绍的

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.It provides fast and valuable HTTP statistics for system administrators that require a visual server report on the fly.

安装

能用apt安装的即不再折腾了

apt install goaccess

使用

用法很简单

goaccess  /var/log/nginx/access.log

还可以支持多个文件一起分析

goaccess  /var/log/nginx/access.log  /var/log/nginx/access.log.1

如果在终端里会让选择格式,如果还是默认格式基本上第一个就行了。

如果在nginx部署了很多站点,有着不同的hostname,那默认的日志格式是没法区分不同的站点的,需要改动日志格式并且与goaccess相配合。首先在/etc/nginx/nginx.conf里面的http配置里面新增日志格式。

log_format vcombined '$host:$server_port '
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent"';

然后在默认log后面加上这个配置。

access_log /var/log/nginx/access.log vcombined;

然后选NCSA Combined Log Format with Virtual Host这一项。

这个是在终端里面显示的goaccess还可以生成html页面,可以直接存放在nginx静态文件目录下面。

goaccess access.log --log-format=VCOMBINED -a > /var/www/pages/log/index.html

其中--log-format=VCOMBINED 可以直接指定日志格式。

还可以安排到定时脚本里面进行

15 6 * * * goaccess /var/log/nginx/access.log.1 /var/log/nginx/access.log --log-format=VCOMBINED -a > /var/www/maind/log/index.html

获取访客真实ip

如果前端套上cloudflare等cdn之后,IP地址会变成cdn的地址,可以通过简单设置获取访客的真是ip地址

/etc/nginx/conf.d里面新增下面的配置文件

#Cloudflare
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;

# use any of the following two
real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;

这个文件可以用脚本自动生成

#!/bin/bash
#rm /etc/nginx/conf.d/cloudflare_ip.conf
echo "#Cloudflare" > /etc/nginx/conf.d/cloudflare_ip.conf;
for i in `curl https://www.cloudflare.com/ips-v4`; do
        echo "set_real_ip_from $i;" >> /etc/nginx/conf.d/cloudflare_ip.conf;
done
for i in `curl https://www.cloudflare.com/ips-v6`; do
        echo "set_real_ip_from $i;" >> /etc/nginx/conf.d/cloudflare_ip.conf;
done
echo "" >> /etc/nginx/conf.d/cloudflare_ip.conf;
echo "# use any of the following two" >> /etc/nginx/conf.d/cloudflare_ip.conf;
echo "real_ip_header CF-Connecting-IP;" >> /etc/nginx/conf.d/cloudflare_ip.conf;
echo "#real_ip_header X-Forwarded-For;" >> /etc/nginx/conf.d/cloudflare_ip.conf;

其他的cdn以此类推。

最后,每天自动化生成的分析html安排在https://www.dogcraft.top/log/,生成的页面还不错,挺漂亮的。