第三十七節(jié)、Nginx日志分析/防盜鏈

日志格式

Nginx日志的格式一般在nginx.conf里面配置,常見(jiàn)的格式配置如下(默認(rèn)注釋掉了需要打開(kāi)):
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;
格式說(shuō)明:

  • $remote_addr, $http_x_forwarded_for 記錄客戶端IP地址
  • $remote_user 記錄客戶端用戶名稱
  • $request 記錄請(qǐng)求的URL和HTTP協(xié)議
  • $status 記錄請(qǐng)求狀態(tài)
  • $body_bytes_sent 發(fā)送給客戶端的字節(jié)數(shù),不包括響應(yīng)頭的大?。?該變量與Apache模塊mod_log_config里的“%B”參數(shù)兼容。
  • $bytes_sent 發(fā)送給客戶端的總字節(jié)數(shù)。
  • $connection_requests 當(dāng)前通過(guò)一個(gè)連接獲得的請(qǐng)求數(shù)量。
  • $http_referer 記錄從哪個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的
  • $http_user_agent 記錄客戶端瀏覽器相關(guān)信息
  • $request_length 請(qǐng)求的長(zhǎng)度(包括請(qǐng)求行,請(qǐng)求頭和請(qǐng)求正文)。
  • $request_time 請(qǐng)求處理時(shí)間,單位為秒,精度毫秒; 從讀入客戶端的第一個(gè)字節(jié)開(kāi)始,直到把最后一個(gè)字符發(fā)送給客戶端后進(jìn)行日志寫(xiě)入為止。
日志分析

分析日志不要在nginx服務(wù)器上,將日志文件拷貝到其他服務(wù)器分析

  • 分析訪問(wèn)量前20的IP
    awk '{print $1}' access_201601662.log|sort|uniq -c|sort -nr|head 20
  • 分析網(wǎng)站9:00-12:00時(shí)間段訪問(wèn)數(shù)量
    sed -n "/2016:09:00/,/2016:12:00"p access_201601662.log|wc -l
  • 找到當(dāng)前日志中502或者404錯(cuò)誤的頁(yè)面并統(tǒng)計(jì)
    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}'作用等價(jià)于cat,也是用于查看但是效率更高
日志切割腳本

Nginx 是一個(gè)非常輕量的 Web 服務(wù)器,體積小、性能高、速度快等諸多優(yōu)點(diǎn)。但不足的是也存在缺點(diǎn),比如在產(chǎn)生的訪問(wèn)日志文件一直就是一個(gè),不會(huì)自動(dòng)地進(jìn)行切割,如果訪問(wèn)量很大的話,將會(huì)導(dǎo)致日志文件容量非常大,不便于管理。當(dāng)然了,我們也不希望看到這么龐大的一個(gè)訪問(wèn)日志文件,那需要手動(dòng)對(duì)這個(gè)文件進(jìn)行切割。
如果訪問(wèn)日志非常大,不便于我們每天查看相關(guān)的網(wǎng)站異常日志。
在 Linux 平臺(tái)上 Shell 腳本豐富,使用 Shell 腳本加 crontab 命令能非常方便地進(jìn)行切割。
定時(shí)切割日志,這里切割的方法我們直接使用mv即可。
直接上腳本內(nèi)容如下:

#!/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."
防盜鏈設(shè)置

防盜鏈的含義:網(wǎng)站內(nèi)容不在自己服務(wù)器上,而通過(guò)技術(shù)手段,繞過(guò)別人放廣告有利益的最終頁(yè),直接在自己的有廣告有利益的頁(yè)面上向最終用戶提供此內(nèi)容。 常常是一些名不見(jiàn)經(jīng)傳的小網(wǎng)站來(lái)盜取一些有實(shí)力的大網(wǎng)站的地址(比如一些音樂(lè)、圖片、軟件的下載地址)然后放置在自己的網(wǎng)站中,通過(guò)這種方法盜取大網(wǎng)站的空間和流量。
這樣的話,我們會(huì)看到每天訪問(wèn)量很大,占用很多不必要的帶寬,浪費(fèi)資源,所以我們需要做一些限制。
防盜鏈其實(shí)就是采用服務(wù)器端編程,通過(guò)url過(guò)濾技術(shù)實(shí)現(xiàn)的防止盜鏈的軟件。

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;
                }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容