• nginx日志分析、切割与防盗链


    一、nginx日志分析

    在企业服务器运维中,当Nginx服务器正常运行后,SA会经常密切关注Nginx的访问日志,发现有异常的日志信息需要进行及时处理。

    Nginx默认日志路径/usr/local/nginx/logs/,其中包含访问日志access.log 和错误记录日志error.log,如图查看nginx访问日志:cat /usr/local/nginx/logs/access.log |more,如图14-7所示:

    Nginx访问日志打印的格式可以自定义,例如Nginx日志打印格式配置如下,Log_format 用来设置日志格式,Name(模块名)  Type(日志类型),可以配置多个日志模块,分别供不同的虚拟主机日志记录所调用。

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent"  $request_time'

    Nginx日志格式内部变量及函数参数说明:

    $remote_addr                记录客户端IP地址;
    $server_name               虚拟主机名称;
    $http_x_forwarded_for         HTTP的请求端真实的IP;
    $remote_user                 记录客户端用户名称;
    $request                     记录请求的URL和HTTP协议;
    $status                     记录返回HTTP请求的状态;
    $uptream_status           upstream的状态;
    $ssl_protocol             SSL协议版本;
    $body_bytes_sent             发送给客户端的字节数,不包括响应头的大小;
    $bytes_sent                 发送给客户端的总字节数;
    $connection_requests         当前通过一个连接获得的请求数量;
    $http_referer                 记录从哪个页面链接访问过来的;
    $http_user_agent             记录客户端浏览器相关信息;
    $request_length             请求的长度,包括请求行,请求头和请求正文;
    $msec                      日志写入时间;
    $request_time             请求处理时间,单位为秒,精度毫秒,Nginx接受用户请求的第一个字节到发送完响应数据的时间,包括:接收请求数据时间、程序响应时间、输出、响应数据时间。
    $upstream_response_time 应用程序响应时间,Nginx向后端服务建立连接开始到接受完数据然后关闭连接为止的总时间

    通过Nginx日志,可以简单分析WEB网站的运行状态、数据报表、IP、UV(unique visitor)、PV(page view)访问量等需求,如下为常用需求分析:

    1)统计Nginx服务器独立IP数

    awk  '{print $1}' access.log |sort -r|uniq -c | wc -l

    2)统计Nginx服务器总PV量,即页面访问量,每打开一次页面PV计数+1,刷新页面也是

    awk  '{print $7}' access.log |wc -l

    3)统计Nginx服务器UV统计,指独立访客访问数,一台电脑终端为一个访客

    awk  '{print $11}' access.log |sort -r|uniq -c |wc -l

    4)分析Nginx访问日志截止目前为止访问量前20的IP列表

    awk  '{print  $1}'  access.log|sort |uniq -c |sort -nr |head -20

    5)分析Nginx访问日志早上9点至中午12点的总请求量

    sed  -n  "/2016:09:00/,/2016:12:00/"p access.log
    awk  '/2017:09:00/,/2017:12:00/' access.log|wc –l

    6)分析Nginx访问日志总的独立IP数

    awk  '{print $1}'  access.log |sort |uniq -c|wc -l

    7)分析Nginx访问日志状态码404、502、503、500、499等错误信息页面,打印错误出现次数大于20的IP地址

    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'

    8)分析Nginx访问日志访问最多的页面

    awk  '{print $7}'   access.log |sort |uniq -c|sort -nr|head -20

    9)分析Nginx访问日志请求处理时间大于5秒的URL,并打印出时间、URL、访客IP

    awk  '{if ($NF>5)  print $NF,$7,$1}'  access.log|sort -nr|more

    二、Nginx日志切割案例

          Nginx WEB服务器每天会产生大量的访问日志,而且不会自动地进行切割,如果持续天数访问,将会导致该access.log日志文件容量非常大,不便于SA查看相关的网站异常日志。

    可以基于Shell 脚本结合Crontab计划任务对Nginx日志进行自动、快速的切割,其切割的方法使用mv命令即可,如图所示。

    #!/bin/bash
    #2018年9月19日13:51:47
    #by author xxxx
    
    NGINX_LOG_DIR=/data/logs/discuz/
    
    mv $NGINX_LOG_DIR/access.log $NGINX_LOG_DIR/access_`date -d "yesterday" +"%Y%m%d"`.log
    #mv $NGINX_LOG_DIR/access.log $NGINX_LOG_DIR/access_`date +%Y%m%d`.log
    #/usr/local/nginx/sbin/nginx -s reload
    kill  -USR1  `cat /usr/local/nginx/nginx.pid`
    echo "-------------------------------------------"
    echo "The Nginx log Cutting Successfully!"
    echo "You can access backup nginx log $D_LOG/access.log files."

    将如上脚本内容写入auto_nginx_log.sh文件,crontab /var/spool/cron/root文件中添加如下代码,每天凌晨自动切割日志:

    0  0  *  *  *  /bin/sh  /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1

    三、Nginx防盗链案例配置

           防盗链的含义是网站内容本身不在自己公司的服务器上,而通过技术手段,直接在调用其他公司的服务器网站数据,而向最终用户提供此内容。一些小网站盗链高访问量网站的音乐、图片、软件的链接,然后放置在自己的网站中,通过这种方法盗取高访问量网站的空间和流量。

           网站每天访问量很大,而且占用了很多不必要的带宽,浪费资源,所以必须采取一些限制措施。防盗链其实就是采用服务器端编程技术,通过URL过滤、主机名等实现的防止盗链的软件。

    例如http://www.jfedu.net/linux/页面,如果没有配置防盗链,别人就能轻而易举的在其的网站上引用该页面。Nginx防盗链配置代码如下:

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

    Nginx防盗链参数详解:

    valid_referers表示可用的referers设置
    none 表示没有referers,直接通过浏览器或者其他工具访问。
    blocked表示有referers,但是被代理服务器或者防火墙隐藏;
    jfedu.net 表示通过jfedu.net访问的referers;
    *.jfedu.net 表示通过*.jfedu.net访问的referers,*表示任意host主机。

    防盗链测试,找另外一台测试服务器,基于Nginx发布如下test.html页面,代码如下,去调用www.jfedu.net官网的test.png图片,由于www.jfedu.net官网设置了防盗链,所以无法访问该图片。

    <html>
    <h1>TEST Nginx PNG</h1>
    <img src="http://www.jfedu.net/test.png">
    </html>

    默认没有配置Nginx防盗链,网站正常调用www.jfedu.net的logo图片,访问如图14-9所示:

                          

    配置Nginx防盗链,网站无法正常调用www.jfedu.net的logo图片,访问如图14-10所示:

                         

  • 相关阅读:
    mssql 2008 数据库可疑
    sss
    css 浏览器兼容 重置代码
    .net 接口与 foreach必要条件
    .net获取ip
    flash与js的通信
    WebService传输文件的几个知识点
    【前端】深入浅出Javascript中的数值转换
    [前端]代理知识入门介绍
    Hello 博客园! ---致我人生中的第一篇随笔
  • 原文地址:https://www.cnblogs.com/deny/p/10022559.html
Copyright © 2020-2023  润新知