針對使用Cloudflare CDN國內網站的速度優化方案

Cloudflare優化方案

在大家開始閱讀此文之前,小編先陳述下自己的觀點:非必要的情況,國內站點儘可能不使用Cloudflare的CDN服務。除非你所搭建的WordPress網站所使用的伺服器不在境內,否則國內有很多CDN服務可以滿足你的網站加速需求,比如阿里雲、騰訊雲,七牛雲、UPYUN等服務商提供的CDN。

但,如果你非得要使用Cloudflare的CDN,不妨看看sleele這篇教程,思路清晰且易於理解,enjoy!

前言

最近再一次著手優化部落格的訪問速度,基於上次的優化再次提升,這次用上了我之前放棄的cloudflare cdn加速方案,現在有了新的思路和新的工具。

cloudflare的cdn節點都在海外,國內訪問速度其實並不理想,如果自己的vps線路質量可以的話,用cloudflare cdn反倒會減速,這是我之前的想法,但是自cloudflare推出了cloudflare partner計劃,可以通過partner免費使用cname解析,從而可以使用某些奇淫巧術實現自定義cdn節點。

dnspod dns解析

本來想按邏輯順序來寫,但是考慮到實際操作是按照工具順序來執行,就先從dns解析說起吧!

以往如果我們要使用cloudflare的免費cdn,就要使用cloudflare的dns解析,現在有了partner計劃,可以免費使用cname解析,這次我們選用dnspod提供的dns解析,dnspod還提供d監控服務,d監控可以監控網站線路,並根據網路情況自動切換節點

先說說什麼是d監控

什麼是D監控?
D監控就是:當您的一個伺服器確認宕機後,系統會自動給您切換到可用的伺服器,宕掉的伺服器恢復後自動切換回原ip(注意:系統不預設開啟D監控,需要您手動啟用D監控)
檢測的原理:所有監控點會向目標服 務器發起一次 http請求,當且僅當所有監控點都得不到應答時,我們會認為伺服器宕機,從而進行操作。(這裡需要注意的是,403等錯誤返回只提示警告,不進行ip切換,500以上錯誤返回提示宕機,進行切換)

要使用dnspod dns解析,首先要註冊dnspod,並把域名掛在上面,這個相信有能力建站的人都會操作,我就不贅述了

域名放在dnspod dns解析後,暫時不要設定d監控,現在可以去搞cname了

cloudflare partner

先註冊cloudflare賬號(http://cloudflare.com/),之後去cloudflare partner處登入。

我使用的是笨牛網提供的cloudflare partner服務:https://cdn.bnxb.com/

註冊登入笨牛網的cloudflare partner服務,然後選擇新增域名,使用cname方式接入。

BNXB管理後臺

BNXB管理後臺

提交後會給出cname地址,把cname地址填寫進dnspod的dns解析中。

CNAME回源設定

CNAME回源設定

過一會就會生效,ping一下的網站,看是否走了cloudflare cdn,如果這時候走了cloudflare cdn,那麼ping網站的時候會出現cname地址。

重頭戲來了

cname接入cloudflare cdn最大的好處就是可以自定義cdn節點,這樣我們就可以選擇國內訪問最快的cloudflare cdn節點,從而實現加速訪問,並且在d監控的加持下防止網站因線路的緣故中斷訪問。

目前cloudflare所提供的免費節點很多都被玩爛了,所以需要大家自行測試。

我這裡分享一些網上的提供的ip,這些ip段,從中選擇ip段後修改ip地址,填寫到dnspod中,例172.64.32.56,並且按照運營商填寫,每個運營商填寫兩個節點,海外為預設:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
172.64.32.1/24 (推薦移動,走香港)
104.28.14.0/24 (推薦移動,走新加坡)
104.23.240.0-104.23.243.254 (推薦聯通、移動,線路未知)
108.162.236.1/24 (推薦聯通,走美國)
104.20.157.0/24 (推薦聯通,走日本)
104.16.160.1/24 (推薦電信,走洛杉磯)
172.64.0.0/24 (推薦電信,走舊金山)
172.64.32.* (走歐洲)
108.162.236.1/24 聯通 走美國
172.64.32.1/24 移動 走香港
104.16.160.1/24 電信 走美國洛杉磯
172.64.0.0/24 電信 美國舊金山
104.20.157.0/24 聯通 走日本
104.28.14.0/24 移動 走新加坡
104.18.62.1/24 香港hkix.net
104.16.35.1/24 香港hkix.net
104.16.36.1/24 香港hkix.net
104.18.35.1/24 香港hkix.net
104.18.36.1/24 香港hkix.net
104.16.54.1/24 香港
104.16.55.1/24 香港
104.18.128.1/24 香港
104.18.129.1/24 香港
104.18.130.1/24 香港
104.18.131.1/24 香港
104.18.132.1/24 香港
104.19.195.1/24 香港
104.19.196.1/24 香港
104.19.197.1/24 香港
104.19.198.1/24 香港
104.19.199.1/24 香港
#適合電信的節點
104.23.240.*
#走歐洲各國出口 英國德國荷蘭等 延遲比美國高一些 適合源站在歐洲的網站
172.64.32.*
#雖然去程走新加坡,但是回程線路的繞路的,實際效果不好,不推薦
104.16.160.*
#聖何塞的線路,比洛杉磯要快一點,推薦
108.162.236.*
#亞特蘭大線路,延遲穩定,但是延遲較高
#適合移動的節點
162.158.133.*
#走的丹麥,這一段ip只有部分能用,可以自己試一下,繞美國
198.41.214.*
198.41.212.*
198.41.208.*
198.41.209.*
172.64.32.*
141.101.115.*
#移動走香港的IP段有很多,以上並不是全部。CF移動走香港的分直連和走ntt的效果都挺不錯的,不過部分地區晚上還是會丟包。
172.64.0. *
#這是走聖何塞的,一般用香港的就行
172.64.16.*
#歐洲線路.繞
#1.0.0.1效果較好
電信部分
大多數省直接使用1.0.0.0即可,延遲低,丟包少,
# 移動部分
#新加坡
104.18.48.0-104.18.63.255
104.24.112.0-104.24.127.255
104.27.128.0-104.27.143.255
104.28.0.0-104.28.15.255
# 移動部分
#聖何塞
104.28.16.0-31.255
104.27.144.0-243.254
104.23.240.0-243.254
#香港cloudflare1-100g.hkix.net
1.0.0.0-254
1.1.1.0-254
#香港直連
104.16.0.0-79.255
104.16.96.0-175.254
104.16.192.0-207.255
172.64.32.1/24 (推薦移動,走香港) 104.28.14.0/24 (推薦移動,走新加坡) 104.23.240.0-104.23.243.254 (推薦聯通、移動,線路未知) 108.162.236.1/24 (推薦聯通,走美國) 104.20.157.0/24 (推薦聯通,走日本) 104.16.160.1/24 (推薦電信,走洛杉磯) 172.64.0.0/24 (推薦電信,走舊金山) 172.64.32.* (走歐洲) 108.162.236.1/24 聯通 走美國 172.64.32.1/24 移動 走香港 104.16.160.1/24 電信 走美國洛杉磯 172.64.0.0/24 電信 美國舊金山 104.20.157.0/24 聯通 走日本 104.28.14.0/24 移動 走新加坡 104.18.62.1/24 香港hkix.net 104.16.35.1/24 香港hkix.net 104.16.36.1/24 香港hkix.net 104.18.35.1/24 香港hkix.net 104.18.36.1/24 香港hkix.net 104.16.54.1/24 香港 104.16.55.1/24 香港 104.18.128.1/24 香港 104.18.129.1/24 香港 104.18.130.1/24 香港 104.18.131.1/24 香港 104.18.132.1/24 香港 104.19.195.1/24 香港 104.19.196.1/24 香港 104.19.197.1/24 香港 104.19.198.1/24 香港 104.19.199.1/24 香港 #適合電信的節點 104.23.240.* #走歐洲各國出口 英國德國荷蘭等 延遲比美國高一些 適合源站在歐洲的網站 172.64.32.* #雖然去程走新加坡,但是回程線路的繞路的,實際效果不好,不推薦 104.16.160.* #聖何塞的線路,比洛杉磯要快一點,推薦 108.162.236.* #亞特蘭大線路,延遲穩定,但是延遲較高 #適合移動的節點 162.158.133.* #走的丹麥,這一段ip只有部分能用,可以自己試一下,繞美國 198.41.214.* 198.41.212.* 198.41.208.* 198.41.209.* 172.64.32.* 141.101.115.* #移動走香港的IP段有很多,以上並不是全部。CF移動走香港的分直連和走ntt的效果都挺不錯的,不過部分地區晚上還是會丟包。 172.64.0. * #這是走聖何塞的,一般用香港的就行 172.64.16.* #歐洲線路.繞 #1.0.0.1效果較好 電信部分 大多數省直接使用1.0.0.0即可,延遲低,丟包少, # 移動部分 #新加坡 104.18.48.0-104.18.63.255 104.24.112.0-104.24.127.255 104.27.128.0-104.27.143.255 104.28.0.0-104.28.15.255 # 移動部分 #聖何塞 104.28.16.0-31.255 104.27.144.0-243.254 104.23.240.0-243.254 #香港cloudflare1-100g.hkix.net 1.0.0.0-254 1.1.1.0-254 #香港直連 104.16.0.0-79.255 104.16.96.0-175.254 104.16.192.0-207.255
172.64.32.1/24 (推薦移動,走香港)
104.28.14.0/24 (推薦移動,走新加坡)
104.23.240.0-104.23.243.254 (推薦聯通、移動,線路未知)
108.162.236.1/24 (推薦聯通,走美國)
104.20.157.0/24 (推薦聯通,走日本)
104.16.160.1/24 (推薦電信,走洛杉磯)
172.64.0.0/24 (推薦電信,走舊金山)
172.64.32.* (走歐洲)
 
108.162.236.1/24 聯通 走美國
172.64.32.1/24 移動 走香港
104.16.160.1/24 電信 走美國洛杉磯
172.64.0.0/24 電信 美國舊金山
104.20.157.0/24 聯通 走日本
104.28.14.0/24 移動 走新加坡
 
104.18.62.1/24 香港hkix.net
104.16.35.1/24 香港hkix.net
104.16.36.1/24 香港hkix.net
104.18.35.1/24 香港hkix.net
104.18.36.1/24 香港hkix.net
104.16.54.1/24 香港
104.16.55.1/24 香港
104.18.128.1/24 香港
104.18.129.1/24 香港
104.18.130.1/24 香港
104.18.131.1/24 香港
104.18.132.1/24 香港
104.19.195.1/24 香港
104.19.196.1/24 香港
104.19.197.1/24 香港
104.19.198.1/24 香港
104.19.199.1/24 香港
#適合電信的節點
104.23.240.*
#走歐洲各國出口 英國德國荷蘭等 延遲比美國高一些 適合源站在歐洲的網站
172.64.32.*
#雖然去程走新加坡,但是回程線路的繞路的,實際效果不好,不推薦
104.16.160.*
#聖何塞的線路,比洛杉磯要快一點,推薦
108.162.236.*
#亞特蘭大線路,延遲穩定,但是延遲較高
#適合移動的節點
162.158.133.* 
#走的丹麥,這一段ip只有部分能用,可以自己試一下,繞美國
198.41.214.*
198.41.212.*
198.41.208.*
198.41.209.*
172.64.32.*
141.101.115.*
#移動走香港的IP段有很多,以上並不是全部。CF移動走香港的分直連和走ntt的效果都挺不錯的,不過部分地區晚上還是會丟包。
172.64.0. *
#這是走聖何塞的,一般用香港的就行
172.64.16.* 
#歐洲線路.繞
#1.0.0.1效果較好
電信部分
大多數省直接使用1.0.0.0即可,延遲低,丟包少,
# 移動部分
#新加坡
104.18.48.0-104.18.63.255
104.24.112.0-104.24.127.255
104.27.128.0-104.27.143.255
104.28.0.0-104.28.15.255
# 移動部分
#聖何塞 
104.28.16.0-31.255
104.27.144.0-243.254
104.23.240.0-243.254
#香港cloudflare1-100g.hkix.net
1.0.0.0-254
1.1.1.0-254
#香港直連
104.16.0.0-79.255
104.16.96.0-175.254
104.16.192.0-207.255

還有奇淫巧術

如果不想測試那麼多節點,或者擔心節點掛掉,可以把除預設外所有的記錄值都寫成1.0.0.1這樣,cloudflare會自己判斷,解析後dns記錄會全都轉到1.0.0.1,看起來很秀:

域名DNS管理

域名DNS管理

開啟D監控

點選下圖示示的圖示,把節點都勾選上;

D監控設定

D監控設定

檢視節點情況,目前免費節點的延遲都是忽高忽低,只要對應運營商線路的節點沒紅就沒事。

DNSPod域名監控

DNSPod域名監控

之後如果對節點不滿意就在dnspod裡更換節點即可,生效很快,d監控裡就可以及時檢視新節點情況

cloudflare page rules

cloudflare預設不會快取html檔案,所以為了把資料儘可能多的放到cloudflare節點裡,我們需要對快取內容進行設定。

這是cloudflare官方的 page rules講解,建議看一看,懶得看也沒有關係,按照我的設定來也行:

Page rules設定

Page rules設定

注意!有先後順序

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sleele.com/wp-admin*
sleele.com/*preview=true*
sleele.com/*
sleele.com/wp-admin* sleele.com/*preview=true* sleele.com/*
sleele.com/wp-admin*
 
sleele.com/*preview=true*
 
sleele.com/*

cloudflare快取需要時間,所以edge cache ttl設定時間長一些最好,否則還沒快取到cdn就過期了,我設定的7天,後臺和預覽文章不快取。

這裡再插一句,因為免費賬戶只有3條規則,對於WordPress是不夠用的,為了節省規則,需要修改WordPress登入地址,將其變為wp-adminxxxx

安裝Rename wp-login.php外掛,修改登入地址為wp-adminxxxx

WordPress後臺登入地址

WordPress後臺登入地址

測試是否快取成功

這個可能要等一會才能看到效果,不過是否走cdn節點當時就能夠看出來,

關掉代理軟體,開啟Chrome開發者模式,Network 選項卡,Disable cache 禁用瀏覽器快取,選擇自己的網站網址,Headers標籤,檢視Remote Address是否為之前在dns解析處設定的地址。

快取命中檢視

快取命中檢視

cf-cache-status: HIT則為命中快取,檢視Timing標籤,看TTFB時間,越短越好。

TTFB資訊檢視

TTFB資訊檢視

經過CDN後訪客IP地址不正確的解決辦法

使用cloudflare cdn後,訪客的ip和留言ip都會變為cloudflare cdn的ip,解決辦法也非常簡單,cloudflare官方給出解決辦法。

Cloudflare將訪問者的 IP 地址包含在  X-Forwarded-For 標頭和 CF-Connecting-IP 標頭。

修改Nginx配置檔案,在http內容裡新增如下內容,把cloudflare的ip段新增進去:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
location / {
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
# use any of the following two
real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;
}
location / { set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 199.27.128.0/21; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; # use any of the following two real_ip_header CF-Connecting-IP; #real_ip_header X-Forwarded-For; }
location / {
 set_real_ip_from 103.21.244.0/22;
 set_real_ip_from 103.22.200.0/22;
 set_real_ip_from 103.31.4.0/22;
 set_real_ip_from 104.16.0.0/12;
 set_real_ip_from 108.162.192.0/18;
 set_real_ip_from 131.0.72.0/22;
 set_real_ip_from 141.101.64.0/18;
 set_real_ip_from 162.158.0.0/15;
 set_real_ip_from 172.64.0.0/13;
 set_real_ip_from 173.245.48.0/20;
 set_real_ip_from 188.114.96.0/20;
 set_real_ip_from 190.93.240.0/20;
 set_real_ip_from 197.234.240.0/22;
 set_real_ip_from 198.41.128.0/17;
 set_real_ip_from 199.27.128.0/21;
 set_real_ip_from 2400:cb00::/32;
 set_real_ip_from 2606:4700::/32;
 set_real_ip_from 2803:f800::/32;
 set_real_ip_from 2405:b500::/32;
 set_real_ip_from 2405:8100::/32;
 set_real_ip_from 2c0f:f248::/32;
 set_real_ip_from 2a06:98c0::/29;
 # use any of the following two
 real_ip_header CF-Connecting-IP;
 #real_ip_header X-Forwarded-For;
 }
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 載入配置
nginx -s reload
# 載入配置 nginx -s reload
# 載入配置
nginx -s reload

 

WordPress再加速

WordPress是動態生成網頁,為了進一步提高載入速度,使用WP Super Cache可以生成靜態頁面,同時開啟gzip壓縮選項,Cache Everything可以把gzip壓縮後的html快取進cdn,以提升載入速度。另一款Autoptimize外掛也提供非常優秀的WordPress優化支援。

WP Super Cache頁面壓縮開啟

WP Super Cache頁面壓縮開啟

WP Super Cache壓縮生效與否

WP Super Cache壓縮生效與否

除此之外,建議安裝官方外掛cloudflare

可以手動和自動清除快取,檢視資料分析,非常有用。

cloudflare外掛安裝

cloudflare外掛安裝

速度測試

首先說一下,這些速度測試的分數只能作為參考,沒有太大的實際意義,特別是谷歌測試。

boce全國速度測試

boce網站速度測試

boce網站速度測試

Google PageSpeed Insights

Google PageSpeed Insights

Google PageSpeed Insights

Pingdom Website Speed Test

Xnip2020-08-25_14-22-57

Pingdom

關於網站測速,可以閱讀網站測速效能測試深入淺出教程[附15款常用網站測速工具]如何做到Google PageSpeed Insights測試滿分/100分兩篇文章!

結語

目前免費的cloudflare cdn加速手段就這些了,在page rules裡我禁用了效能優化,不推薦開啟。還有一個付費的據說能夠大幅提升速度,我沒用過。經過以上優化,大部分人應該能夠在3秒內開啟我的網站 https://sleele.com/

Railgun

Railgun 是 Cloudflare 專門為 Business 和 Enterprise 企業級客戶提供的終極加速方案。要使用它,先需要升級網站套餐為 Business 或 Enterprise,然後還需要在伺服器上安裝必要軟體並在 Cloudflare 上完成配置。這相當於是一個雙邊加速的軟體,其實現原理是讓伺服器與 Cloudflare 建立一個長久的 TCP 加密連線,使用 Railgun 獨有協議而不是 HTTP 協議,這樣顯然能減少連線延遲。此外,它還會對動態頁面快取:考慮到大多動態頁面都包含了大量相同的 HTML 資訊,在使用者請求一個新的頁面時,伺服器將只傳送那些變化了的內容。這相當於一種多次的 Gzip 壓縮。

文章轉自《sleele的部落格》,稍有改動。參考文章列表:

評論留言

脣槍舌劍 (4)

  • GG的頭像

    GG

    2024.2.22 01:02

    2024年这个方法还能用吗

    回覆
  • Guu的頭像

    Guu

    2022.11.14 15:11

    请问A记录和CNAME记录怎么能同时存在?而且怎么会有那么多A记录同时解析?

    回覆
  • IP 查询的頭像

    IP 查询

    2022.5.6 10:05

    讲的不错,学习了

    回覆
  • 佛系软件的頭像

    佛系软件

    2021.3.29 19:03

    速度真的好快,

    回覆