自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Nginx 解決error.log和access.log日志的改善總結(jié)

開(kāi)發(fā) 架構(gòu)
自從了解了error和access日志的重要性,并且學(xué)會(huì)閱讀相關(guān)log文檔之后。通過(guò)調(diào)整nginx配置,解決error中的大量報(bào)錯(cuò)提示。通過(guò)過(guò)濾js等靜態(tài)資源減少大量的access日志記錄內(nèi)容。同時(shí),經(jīng)過(guò)使用阿里云安全組封禁大量國(guó)外ip地址的訪問(wèn)。我的access.log文件和error.log的尺寸得到了有效壓縮管理。

1. 介紹

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

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

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

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

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

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

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

本篇作為一個(gè)回顧總結(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,以及爬蟲屏蔽過(guò)濾返回444:https://zinyan.com/?p=454

2. 總結(jié)

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

處理這個(gè)異常,可以通過(guò)封禁ip地址的訪問(wèn),也可以不用在意。

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

當(dāng)我們配置UserAgent?請(qǐng)求中帶有爬蟲關(guān)鍵字的請(qǐng)求直接返回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"

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

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

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

而且也有一些過(guò)濾無(wú)法生效的情況,需要我們隨時(shí)進(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 爬蟲工具的過(guò)濾。還有通過(guò)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/)"

同時(shí)在屏蔽過(guò)程中出現(xiàn)了有些能夠屏蔽而有些無(wú)法屏蔽的問(wè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:"-"

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

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

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:"-"

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

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

在收獲上來(lái)說(shuō),這一些配置的付出是值得的。

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

基于發(fā)現(xiàn)的問(wèn)題,再次改進(jìn)access的過(guò)濾規(guī)則。以及非法請(qǐng)求返回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文件中就不會(huì)添加ico|gif|jpg|jpeg|png|bmp|swf|js|css|svg|woff|ttf|jfif|webp 作為后綴結(jié)尾的日志內(nèi)容了。

3.2 map實(shí)現(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;
}
...
}

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

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

http {
...
# 創(chuàng)建一個(gè)屏蔽規(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;
}
...
}

語(yǔ)法解釋:

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

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

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

因?yàn)樵趎ginx 的if判斷中,參數(shù)值0或者為空字符串,會(huì)判斷為false,其他判斷為true。

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

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)了這個(gè)if命名錯(cuò)誤的提示,并不是所謂的缺乏if命名的依賴庫(kù),而是Nginx中的if命名和括號(hào)中間需要有空格。

nginx -t? 檢測(cè)通過(guò)后,通過(guò)service nginx reload刷新配置就可以生效了。

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

責(zé)任編輯:武曉燕 來(lái)源: Zinyan
相關(guān)推薦

2019-07-28 18:30:52

MySQL日志數(shù)據(jù)庫(kù)

2009-12-04 13:14:15

PHP error_l

2020-08-20 12:10:42

MySQL日志數(shù)據(jù)庫(kù)

2024-05-30 08:03:17

2010-09-01 16:17:40

SQL刪除日志

2023-11-23 13:17:39

MySQL?數(shù)據(jù)庫(kù)

2017-06-13 08:55:29

Log日志MySQL

2017-06-13 15:10:02

大數(shù)據(jù)Log日志

2011-01-18 11:15:19

LinuxLOG

2021-01-26 13:47:08

MySQL存儲(chǔ)數(shù)據(jù)

2017-12-21 10:52:52

nginx日志還原

2024-06-11 00:00:02

MySQL數(shù)據(jù)庫(kù)系統(tǒng)

2024-05-28 00:10:00

JavaMySQL數(shù)據(jù)庫(kù)

2025-01-15 13:19:09

MySQL日志事務(wù)

2013-05-21 10:58:43

Log4jActiveMQSpring

2009-06-12 17:03:51

JBoss和log4j

2020-01-07 10:06:26

Slf4jLog4JLogback

2013-09-11 09:36:02

VMwareLog Insight

2017-06-27 10:21:12

vRealize LoNSX日志管理

2023-01-09 08:01:48

MySQL日志中繼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)