日志格式
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協(xié)議
- $status 記錄請求狀態(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)前通過一個連接獲得的請求數(shù)量盒让。
- $http_referer 記錄從哪個頁面鏈接訪問過來的
- $http_user_agent 記錄客戶端瀏覽器相關(guān)信息
- $request_length 請求的長度(包括請求行,請求頭和請求正文)司蔬。
- $request_time 請求處理時間邑茄,單位為秒,精度毫秒俊啼; 從讀入客戶端的第一個字節(jié)開始肺缕,直到把最后一個字符發(fā)送給客戶端后進行日志寫入為止。
日志分析
分析日志不要在nginx服務(wù)器上,將日志文件拷貝到其他服務(wù)器分析
- 分析訪問量前20的IP
awk '{print $1}' access_201601662.log|sort|uniq -c|sort -nr|head 20
- 分析網(wǎng)站9:00-12:00時間段訪問數(shù)量
sed -n "/2016:09:00/,/2016:12:00"p access_201601662.log|wc -l
- 找到當(dāng)前日志中502或者404錯誤的頁面并統(tǒng)計
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 服務(wù)器授帕,體積小同木、性能高、速度快等諸多優(yōu)點跛十。但不足的是也存在缺點彤路,比如在產(chǎn)生的訪問日志文件一直就是一個,不會自動地進行切割芥映,如果訪問量很大的話洲尊,將會導(dǎo)致日志文件容量非常大,不便于管理屏轰。當(dāng)然了颊郎,我們也不希望看到這么龐大的一個訪問日志文件,那需要手動對這個文件進行切割霎苗。
如果訪問日志非常大姆吭,不便于我們每天查看相關(guān)的網(wǎng)站異常日志。
在 Linux 平臺上 Shell 腳本豐富唁盏,使用 Shell 腳本加 crontab 命令能非常方便地進行切割内狸。
定時切割日志,這里切割的方法我們直接使用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ù)器上昆淡,而通過技術(shù)手段,繞過別人放廣告有利益的最終頁刽严,直接在自己的有廣告有利益的頁面上向最終用戶提供此內(nèi)容昂灵。 常常是一些名不見經(jīng)傳的小網(wǎng)站來盜取一些有實力的大網(wǎng)站的地址(比如一些音樂、圖片舞萄、軟件的下載地址)然后放置在自己的網(wǎng)站中眨补,通過這種方法盜取大網(wǎng)站的空間和流量。
這樣的話倒脓,我們會看到每天訪問量很大撑螺,占用很多不必要的帶寬,浪費資源崎弃,所以我們需要做一些限制甘晤。
防盜鏈其實就是采用服務(wù)器端編程含潘,通過url過濾技術(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;
}
}
}