日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Nginx解決error.log和access.log日志的改善總結(jié)

1. 介紹

自從了解了error和access日志的重要性,并且學(xué)會閱讀相關(guān)log文檔之后。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供淮上網(wǎng)站建設(shè)、淮上做網(wǎng)站、淮上網(wǎng)站設(shè)計、淮上網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、淮上企業(yè)網(wǎng)站模板建站服務(wù),10余年淮上做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

通過調(diào)整nginx配置,解決error中的大量報錯提示。通過過濾js等靜態(tài)資源減少大量的access日志記錄內(nèi)容。

同時,經(jīng)過使用阿里云安全組封禁大量國外ip地址的訪問。我的access.log文件和error.log的尺寸得到了有效壓縮管理。

access.log 從原先的12m左右的的文件,變成了現(xiàn)在的400KB。記錄的訪問數(shù)據(jù)也清晰了很多。

error.log也從原先的8M左右的文件,變成了現(xiàn)在的1KB,或者300Bytes的文件。甚至有時候還是0 Bytes。

日志文件的減少,也降低了服務(wù)器的IO讀取的性能開支。可以將更多的內(nèi)存資源用于處理正常的請求。

可以說是一個雙贏的結(jié)局。

本篇作為一個回顧總結(jié)內(nèi)容。具體的error文件內(nèi)容配置可以參考:https://zinyan.com/?p=450 ,https://zinyan.com/?p=453。access.log的文件配置可以參考:https://zinyan.com/?p=445,https://zinyan.com/?p=444,以及爬蟲屏蔽過濾返回444:https://zinyan.com/?p=454

2. 總結(jié)

現(xiàn)在error文件中,剩下的記錄主要就是SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share異常了。

處理這個異常,可以通過封禁ip地址的訪問,也可以不用在意。

剩下的就是access.log文件了。

當(dāng)我們配置UserAgent?請求中帶有爬蟲關(guān)鍵字的請求直接返回444之后,例如:

Status:444,Bytes:0,IP:185.117.225.171,Time:[2022-11-24T04:18:36+08:00],Host:"zinyan.com",Request:"GET /robots.txt HTTP/1.1",Referer:"-",UserAgent:"python-requests/2.28.1"
Status:444,Bytes:0,IP:51.77.247.119,Time:[2022-11-24T04:57:39+08:00],Host:"47.101.47.241",Request:"POST /phpinfo HTTP/1.1",Referer:"-",UserAgent:"curl/7.64.0"

對比不同日期的access.log 可以發(fā)現(xiàn),爬蟲請的數(shù)量在不斷變少。

因為當(dāng)爬蟲多次請求得到結(jié)果是444后,會漸漸降低我們網(wǎng)站的爬取級別,最終猶豫得不到數(shù)據(jù)而放棄爬取。

但是,也會有一些新增加的爬蟲需要我們注意,并添加到過濾條件中。

而且也有一些過濾無法生效的情況,需要我們隨時進(jìn)行一些配置的修改例如:

Status:404,Bytes:177,IP:18.195.96.149,Time:[2022-11-24T04:58:10+08:00],Host:"zinyan.com",Request:"GET /s/.git/HEAD HTTP/1.1",Referer:"-",UserAgent:"RepoLookoutBot/1.0.0 (abuse reports to abuse@repo-lookout.org)"Status:404,Bytes:186,IP:18.195.96.149,Time:[2022-11-24T04:58:42+08:00],Host:"zinyan.com",Request:"GET /categories/.git/HEAD HTTP/1.1",Referer:"-",UserAgent:"RepoLookoutBot/1.0.0 (abuse reports to abuse@repo-lookout.org)"

我們需要新增:RepoLookoutBot 爬蟲工具的過濾。還有通過CensysInspect 工具:

Status:400,Bytes:248,IP:167.248.133.62,Time:[2022-11-24T07:17:24+08:00],Host:"47.101.47.241:443",Request:"GET / HTTP/1.1",Referer:"-",UserAgent:"Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"

同時在屏蔽過程中出現(xiàn)了有些能夠屏蔽而有些無法屏蔽的問題:

Status:444,Bytes:0,IP:167.248.133.62,Time:[2022-11-24T07:17:20+08:00],Host:"47.101.47.241:443",Request:"GET / HTTP/1.1",Referer:"-",UserAgent:"-"
Status:400,Bytes:248,IP:167.248.133.62,Time:[2022-11-24T07:17:23+08:00],Host:"47.101.47.241:443",Request:"GET / HTTP/1.1",Referer:"-",UserAgent:"-"

兩種訪問從access.log中看到,可以說完全一樣。但是卻一個返回444,一個返回400 。返回444說明我的nginx過濾規(guī)則生效了。而400說明沒有生效。

同時,還需要添加上Host為空的訪問,將它們進(jìn)行過濾,例如:

Status:400,Bytes:150,IP:167.248.133.62,Time:[2022-11-24T07:17:24+08:00],Host:"-",Request:"PRI * HTTP/2.0",Referer:"-",UserAgent:"-"

同時,我們也可以檢查靜態(tài)資源是否全部都過濾的情況,例如我的資源用到了jfif,webp文件。我就需要添加到過濾規(guī)則中去。

PS:可能存在部分的過濾失敗,但是整體上來說。提高了網(wǎng)站的安全性,降低了大量的非法請求。

在收獲上來說,這一些配置的付出是值得的。

3. 改進(jìn) nginx過濾規(guī)則

基于發(fā)現(xiàn)的問題,再次改進(jìn)access的過濾規(guī)則。以及非法請求返回444的判斷邏輯。

3.1 修改access_log 記錄

在/etc/nginx/nginx.conf文件中修改如下:

http {
...
log_format main 'Status:$status,Bytes:$body_bytes_sent,IP:$remote_addr,Time:[$time_iso8601],Host:"$http_host",Request:"$request",Referer:"$http_referer",UserAgent:"$http_user_agent"';
map $uri $zinyanloggable {
default 1;
~^(.*\.(ico|gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf|jfif|webp)$) 0;
}
access_log /var/log/nginx/access.log main if=$zinyanloggable;
...
}

這樣,access文件中就不會添加ico|gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf|jfif|webp 作為后綴結(jié)尾的日志內(nèi)容了。

3.2 map實現(xiàn)爬蟲屏蔽

老版本寫法為:

server{
...
if ($http_user_agent ~ ^$){
return 444;
}
if ($http_user_agent ~* "scrapy|python|curl|java|wget|httpclient|okhttp|MJ12bot|Expanse|ahrefsbot|seznambot|serpstatbot|sindresorhus|zgrab"){
return 444;
}
...
}

效率比較低,如果是多個server那么得寫多遍。所以修改為map的規(guī)則進(jìn)行

但是如果改為map的話,需要在http{}之中先創(chuàng)建map規(guī)則,然后再到server中使用就可以了。示例如下:

http {
...
# 創(chuàng)建一個屏蔽規(guī)則zinyanUA,而它的取值從$http_user_agent 中獲取。
map $http_user_agent $zinyanUA {
default 0;
~*(scrapy|python|curl|java|wget|httpclient|okhttp|MJ12bot|Expanse|ahrefsbot|seznambot|serpstatbot|sindresorhus|zgrab|censys|RepoLookoutBot) 1;
~ ^$ 1;
}
...
}

語法解釋:

  • ~ 表示正則表達(dá)式對大小寫敏感。
  • ~* 表示正則表達(dá)式對大小寫不敏感。
  • 后面跟著的內(nèi)容就是正則表達(dá)式了
  • 在正則表達(dá)式中^?代表開頭,$?代表結(jié)尾,^$就代表開頭和結(jié)尾中間沒有字符。也就是字符串為空的。

配置完畢后,在需要的server{}段中添加:

server{
...
if ($zinyanUA){
return 444;
}
...
}

因為在nginx 的if判斷中,參數(shù)值0或者為空字符串,會判斷為false,其他判斷為true。

而我在上面創(chuàng)建的map對象中,規(guī)范了,如果匹配就返回1,不匹配返回0。所以if ($zinyanUA)?為true的就是需要返回444的請求了。

nginx: [emerg] unknown directive "if($http_host)" in /etc/nginx/conf.d/zinyan.conf:49nginx: configuration file /etc/nginx/nginx.conf test failed

如果你出現(xiàn)了這個if命名錯誤的提示,并不是所謂的缺乏if命名的依賴庫,而是Nginx中的if命名和括號中間需要有空格。

nginx -t? 檢測通過后,通過service nginx reload刷新配置就可以生效了。

PS:如果實在過濾不了的,建議直接封IP地址,特別是國外的訪問。國內(nèi)也有不少的攻擊


網(wǎng)站名稱:Nginx解決error.log和access.log日志的改善總結(jié)
網(wǎng)址分享:http://www.dlmjj.cn/article/dhsogjd.html