步驟php
一、開啓slowlog:php-fpm裏修改配置html
觀察slowlog裏的超時文件,而後修改相應超時文件java
二、1修改完後,仍然無效,查看access.log,發現大量以下的請求node
220.181.108.*** - - [22/Oct/2018:14:32:45 +0800] "GET /?gallery-358-s14%2C134_13%2C1_s15%2C135_11%2C0_b%2C34_4%2C9_10%2C0_9%2C3_1%2C0_3%2C1_12%2C0_8%2C0-3--1--index.html HTTP/1.1" 403 162 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
123.125.71.** - - [22/Oct/2018:14:32:45 +0800] "GET /?gallery-358-s14%2C104_13%2C1_s15%2C135_11%2C0_b%2C34_4%2C9_10%2C0_9%2C3_8%2C0_5%2C0_3%2C1_12%2C0-3--1--index.html HTTP/1.1" 403 162 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"nginx
原來是百度的爬蟲不斷的抓取分類頁面的,篩選連接。官方的的篩選連接沒有加rel="nofollow"緩存
三、在相關頁面加上rel="nofollow"後,清空緩存。仍然無效。修改nginx的配置,禁止Baiduspider請求頁面服務器
#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
#禁止指定UA及UA爲空的訪問
if ($http_user_agent ~ "Baiduspider|WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}併發
四、重啓nginx後,終於CPU降下來了。ide
後記:php-fpm
一、這種作法徹底禁止了百度抓取,顯示是不行的。能夠採用如下方法,限制百度抓取的頻率
百度蜘蛛抓取量驟增,致使服務器負載很高。最終用nginx的ngx_http_limit_req_module模塊限制了百度蜘蛛的抓取頻率。每分鐘容許百度蜘蛛抓取200次,多餘的抓取請求返回503。
nginx的配置:
#全局配置
limit_req_zone $anti_spider zone=anti_spider:60m rate=200r/m;
#某個server中
limit_req zone=anti_spider burst=5 nodelay;
if ($http_user_agent ~* "baiduspider") {
set $anti_spider $http_user_agent;
}
參數說明:
指令limit_req_zone 中的rate=200r/m 表示每分鐘只能處理200個請求。
指令limit_req 中的burst=5 表示最大併發爲5。即同一時間只能同時處理5個請求。
指令limit_req 中的 nodelay 表示當已經達到burst值時,再來新請求時,直接返回503
IF部分用於判斷是不是百度蜘蛛的user agent。若是是,就對變量$anti_spider賦值。這樣就作到了只對百度蜘蛛進行限制了。
詳細的參數說明,能夠查看官方文檔。
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_zone
二、待百度抓取頁面的緩存更新後,能夠去掉對Baiduspider的限制(以前的沒有實時生效,應該是分類頁百度是用的緩存,沒那麼快更新,也就無法nofollow,因此設計網站頁面時必定要先考慮好SEO的nofollow問題。)