第三十七节、Nginx日志分析/防盗链

日志格式

Nginx日志的格式一般在nginx.conf里面配置,常见的格式配置如下(默认注释掉了需要打开):
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 logs/access.log main;
格式说明:

  • $remote_addr, $http_x_forwarded_for 记录客户端IP地址
  • $remote_user 记录客户端用户名称
  • $request 记录请求的URL和HTTP协议
  • $status 记录请求状态
  • $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
  • $bytes_sent 发送给客户端的总字节数。
  • $connection_requests 当前通过一个连接获得的请求数量。
  • $http_referer 记录从哪个页面链接访问过来的
  • $http_user_agent 记录客户端浏览器相关信息
  • $request_length 请求的长度(包括请求行,请求头和请求正文)。
  • $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
日志分析

分析日志不要在nginx服务器上,将日志文件拷贝到其他服务器分析

  • 分析访问量前20的IP
    awk '{print $1}' access_201601662.log|sort|uniq -c|sort -nr|head 20
  • 分析网站9:00-12:00时间段访问数量
    sed -n "/2016:09:00/,/2016:12:00"p access_201601662.log|wc -l
  • 找到当前日志中502或者404错误的页面并统计
    awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more
    awk '{print $0}' /usr/local/nginx/logs/access.log|awk '$9==304||$9==503 {print $0}'|more
    awk '{print $0}'作用等价于cat,也是用于查看但是效率更高
日志切割脚本

Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如在产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将会导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。
如果访问日志非常大,不便于我们每天查看相关的网站异常日志。
在 Linux 平台上 Shell 脚本丰富,使用 Shell 脚本加 crontab 命令能非常方便地进行切割。
定时切割日志,这里切割的方法我们直接使用mv即可。
直接上脚本内容如下:

#!/bin/bash
#auto mv nginx log shell
#by author wugk
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`
echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
sleep 2
if [ ! -d $D_LOG ];then
        mkdir -p  $D_LOG
fi
mv $S_LOG  $D_LOG
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
echo "-------------------------------------------"
echo "The Nginx log Cutting Successfully!"
echo "You can access backup nginx log $D_LOG/access.log files."
防盗链设置

防盗链的含义:网站内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
这样的话,我们会看到每天访问量很大,占用很多不必要的带宽,浪费资源,所以我们需要做一些限制。
防盗链其实就是采用服务器端编程,通过url过滤技术实现的防止盗链的软件。

location ~* \.(gif|jpg|png|swf|flv)$
  if ($host !=’*.wugk2.com’) {
     return 403;
    }

其他配置

server {
        listen       80;
        server_name  localhost  www.wugk2.com;
        location / {
            root   html/b;
            index  index.html index.htm;
        }
        location ~* \.(gif|jpg|png|swf|flv)$ {
                valid_referers none blocked  *.wugk2.com;
                root   html/b;
        if ($invalid_referer) {
                #rewrite ^/ http://www.wugk2.com/403.html;
                return 403;
                }
        }
    }

你可能感兴趣的:(第三十七节、Nginx日志分析/防盗链)