WordPress 簡單快速減少網頁爬蟲吃掉你寶貴的 CPU 資源

你是否有曾經疑惑過 https://blog.ocam.live/?p=5155 跟 https://blog.ocam.live/archives/5155 這兩個 URL 看起來文章都是指到同一篇。但如果以整個 WordPress 系統來看你知道嗎?系統吃的資源差別是很大的。這篇就是要教你用簡單的設定來減少網頁爬蟲都 wordpress 的影響。

測試環境:

WordPress 7.0 有啟用 wp-fastest-cache 跟 redis object cache 。文章 URL 為 archives/5155 格式。其它格式教學不能用。

測試一:使用 https://blog.ocam.live/?p=5155

使用 apache 的 ab 程式測。看左邊的 top 程式圖可看出 php-fpm 正在處理大量的需求。

ab -n 100 -c 10 https://blog.ocam.live/?p=5155 #測 100 個連線。同時 10 個連線。
image 20

測試二:使用 https://domain/archives/75841

左邊 top 幾乎無 php-fpm 行程

ab -n 100 -c 10 https://blog.ocam.live/archives/5155  #測 100 個連線。同時 10 個連線。
image 21

兩個不同的 URL 同一篇文章在同一台主機上卻反應出不同的 CPU 使用率。原因我用 AI 產了一張圖

different url same post different cpu usage

簡單來說就是測試一需求會分兩次。圖的上半部用 php 程式判斷文章是否存在含查資料庫(吃 CPU),再回應 301 給 Brower 讓它用 301 的網站取快取靜態頁。但假設一開始就用測試二。則網站會直接回應靜態頁給 Brower 。也就是只跑圖的下半部。

加速方式

知道的原因之後就用 apache 的 rewrite 把 ?p=5152 格式的 URL 變成 archives/75841 格式。中間跳過 PHP 的執行需求。程式如下。把底下程式增加至 .htaccess 最上方.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{QUERY_STRING} ^p=([0-9]+)$
RewriteRule ^$ https://blog.ocam.live/archives/%1? [R=301,L]
</IfModule>

備註

很多網頁爬蟲才不管 robots 或 cloudflare 的防 AI 機器人爬蟲會直接用 ?p=5152 等格式抓資料。此時這修改就會很有用。會非常有感減少主機上的 CPU 使用率。

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。