如何使用雲伺服器自建免費CDN節點?

2021-02-16 新睿雲

你可以手動安裝配置Nginx,或者使用LNMP一鍵安裝包來安裝Nginx,比較好用的有:Oneinstack、LNMP。

如果您都不想使用,可以試試一鍵Nginx安裝包(適用於新睿雲伺服器:Centos 7、Deebian 8系統鏡像)。

1、https://github.com/helloxz/nginx-cdn

Linux一鍵安裝Nginx並開啟CDN(反向代#理),執行下面的命令安裝即可。

wget 

https://raw.githubusercontent.com/helloxz/nginx

cdn/master/nginx.sh

chmod +x nginx.sh && ./nginx.sh

這裡我以wzfou.com作加速為例,有一臺源站新睿雲ECS,還有一臺用作CDN反向代#理的新睿雲ECS,它兩者對應的IP如下:

1、源站:192.168.1.100,就是wzfou.com網站數據真實存放的地方

2、CDN:192.168.1.101  CDN節點,如果有多臺操作方法是一樣的

先在CDN節點上修改Hosts,目的就是告知CDN節點從那裡去獲取網站數據,也就是回源地址,修改如下:

vi /etc/hosts

192.168.1.100 www.wzfou.com

然後在CDN節點創建nginx配置文件wzfou.com.conf

#創建緩存目錄

mkdir -p /data/wwwroot/caches/wzfou.com

#設置緩存目錄權限

chown -R www:www /data/wwwroot/caches/wzfou.com

#創建wzfou.com.conf

vi /usr/local/nginx/conf/vhost/wzfou.com.conf

 nginx配置文件

在wzfou.com.conf中添加下面的內容,緩存目錄/緩存時間請根據實際情況調整,後面會詳細說明各參數含義。

proxy_cache_path /data/wwwroot/caches/wzfou.com levels=1:2 keys_zone=wzfou:50m inactive=30m max_size=50m;

server {

    listen 80;

    server_name wzfou.com;

    charset utf-8,gbk;

        location / {

        proxy_set_header Accept-Encoding "";

           proxy_pass https://wzfou.com;

           proxy_redirect off;

           proxy_set_header X-Real-IP $remote_addr;

     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

           proxy_cache wzfou;

           proxy_cache_valid  200 304  30m;

           proxy_cache_valid  301 24h;

           proxy_cache_valid  500 502 503 504 0s;

           proxy_cache_valid any 1s;

           proxy_cache_min_uses 1;

           expires 12h;

    }

}

相關的說明如下:

1、/data/wwwroot/caches/wzfou.com:為緩存目錄

2、levels:指定該緩存空間有兩層hash目錄,第一層目錄為1個字母,第二層為2個字母。

3、keys_zone=wzfou:50m:為緩存空間起個名字,這裡取名為「wzfou」,後面的50m指內存緩存空間 。

4、inactive=30m:如果30分鐘內該資源沒有被訪問則刪除

5、max_size=50m:指硬碟緩存大小為50MB

6、proxy_cache_valid:指定狀態碼緩存時間,前面寫狀態碼,後面寫緩存時間。

最後重載nginx使配置生效,如果使用的oneinstack直接輸入命令:service nginx reload,如果是xiaoz一鍵腳本輸入:/usr/local/nginx/sbin/nginx -s reload。

上面分享的是Http站點的Nginx反向代-理設置,如果你是想反向代-理Https站點,你需要先為你的域名申請好SSL證書,接著你只需要設置好SSL證書路徑,參考如下配置進行調整即可:

proxy_cache_path /data/wwwroot/caches/wzfou.com levels=1:2 keys_zone=wzfou:50m inactive=30m max_size=50m;

server {

   listen 443 ssl http2;

ssl_certificate /data/ssl/wzfou/wzfou.com.crt;

ssl_certificate_key /data/ssl/wzfou/wzfou.com.key;

ssl_session_timeout 1d;

ssl_session_cache builtin:1000 shared:SSL:10m;

    #ssl_dhparam /data/ssl/dhparam.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

    ssl_prefer_server_ciphers>    ssl_stapling>    ssl_stapling_verify>    server_name wzfou.com;

    access_log /data/wwwlogs/wzfou.com_nginx.log combined;

    charset utf-8,gbk;

        location / {

        proxy_set_header Accept-Encoding "";

           proxy_pass https://wzfou.com;

           proxy_redirect off;

           proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

           proxy_cache wzfou;

           proxy_cache_valid  200 304  30m;

           proxy_cache_valid  301 24h;

           proxy_cache_valid  500 502 503 504 0s;

           proxy_cache_valid any 1s;

           proxy_cache_min_uses 1;

           expires 12h;

    }

}

server {

    listen 80 default_server;

    return 301 https://$host$request_uri;

}

清理Nginx緩存需要ngx_cache_purge模塊幫助,可輸入命令nginx -V查看已經編譯的模塊,如果沒有ngx_cache_purge說明模塊沒有安裝,則需要重新編譯一下Nginx。

 清理緩存1

4.1配置ngx_cache_purge

在server段內加入下面的配置,並重載Nginx,下面的wzfou請與keys_zone定義的值保持一致,否則nginx將無法啟動。

location ~ /purge(/.*) {

allow all;

proxy_cache_purge wzfou $proxy_host$1$is_args$args;

error_page 405 =200 /purge$1;

}

如果想清理緩存,添加purge參數即可,如https://www.xiaoz.me/purge/xxx.png,如果該文件存在緩存,則會提示如下截圖。若不存在緩存,則返回404,若無論什麼情況均返回404,可能配置沒成功。

 清理緩存2

4.2WordPress自動刷新緩存

對於Wordpress博客,如果啟用CDN後頁面被緩存,用戶提交評論後無法馬上顯示出來,可以使用Ajax異步請求ngx_cache_purge接口,當用戶提交評論的時候則清除該頁面緩存。只需要下面的這段js添加到footer.php即可。

<script>

$(document).ready(function(){

$("#submit").click(function(){

var uri = "https://wzfou.com/purge" + window.location.pathname;

$.get(uri,function(data,status){

return true;

});

});

});

</script>

以下是網站使用新睿雲伺服器後進行的CDN完整配置,僅供參考,你需要替換好Keys_zone、SSL路徑、域名等:

proxy_cache_path /data/caches levels=1:2 keys_zone=xiaozcdn:100m inactive=30m max_size=100m;

server

    {

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    ssl>    ssl_certificate /xxx/www_xiaoz_me.crt;

    ssl_certificate_key /xxx/www_xiaoz_me.key;

    ssl_session_timeout 1d;

    ssl_session_cache shared:SSL:50m;

    ssl_session_tickets off;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

    ssl_prefer_server_ciphers>    ssl_stapling>    ssl_stapling_verify>    server_name     www.xiaoz.me;

    charset utf-8,gbk;

   #刪除緩存

    location ~ /dcache(/.*) {

    allow all;

    proxy_cache_purge xiaozcdn $proxy_host$1$is_args$args;

    error_page 405 =200 /purge$1;

    }

       location / {

       #proxy_set_header Accept-Encoding "";

       proxy_pass https://www.xiaoz.me;

       proxy_redirect off;

       proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       proxy_cache xiaozcdn;

       proxy_cache_valid  200 304  30m;

       proxy_cache_valid  301 24h;

       proxy_cache_valid  500 502 503 504 0s;

       proxy_cache_valid any 1s;

       #達到第幾次被緩存?

       proxy_cache_min_uses 1;

       expires 12h;

       proxy_cache_key    $uri$is_args$args;

    }

}

server

{

    listen 80;

    server_name www.xiaoz.me;

    rewrite ^(.*) https://www.xiaoz.me$1 permanent;

}

利用DNS域名解析提供的線路、地域、客戶端等DNS解析功能,我們可以將不同的寬帶用戶、省份用戶還有客戶端用戶解析到CDN節點上了。

 自建CDN節點1

使用站長工具測試看到wzfou.com不同地方的用戶訪問到了不同的CDN節點就表示我們的CDN加速部署成功了。

 自建CDN節點2

如果是Wordpress用戶,當你啟用了Nginx CDN加速後,你會發現WP後臺獲取到的用戶評論IP都變成了CDN節點的,解決這個問題也很簡單,只需要將下面一段代碼加入到wp-config.php文件中即可:

if (isset($_SERVER['HTTP_X_REAL_IP'])) {

$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];

}

Nginx反向綁定域名搭建CDN加速伺服器低成本安裝配置簡單,特別適合不想使用付費CDN的朋友,事實上很多的專業CDN加速也是採用Nginx反向代#理的方式來加速網站訪問,可以說Nginx CDN是非常有效的加速方法。

 自建CDN節點完成

Nginx CDN加速在使用過程中有兩個需要注意的問題,一個是緩存更新問題,如果你的網頁更新頻率的話,可以設置一個更新時間間隔,第二個就是用戶真實IP的問題,我們可以使用PHP或者Nginx等直接獲取真實的IP位址。

相關焦點

  • 如何使用jsDelivr+Github 實現免費CDN加速?
    (‐^▽^‐)雖然放到了雲伺服器上,但是由於博客上傳的圖片等資源越來越多,請求的資源也越來越多,博客訪問速度越來越慢,簡直不忍直視。愁了好久,一直在想辦法優化,自己在網上也找資料,在和博客交流群的小夥伴交流後便有了解決方案【使用cdn加速】。但是呢問題又來了,很多雲服務提供商的cdn加速都是要根據流量花錢的。雖然網站訪問量不多,但是呢能白嫖當然是最好的了。
  • 騰訊雲伺服器, 域名備案及 CDN 服務體驗
    雲伺服器環境一鍵安裝工具類似之前搭建清華笛協(THUFlute)環境用過的XAMPP. Linux 下也有類似的.對了, 騰訊提供的 CDN 服務也只支持給已經備案的域名使用.先看一下 CDN 大概怎麼配置和使用吧, 原理就是你添加一個域名的 CNAME, 指向騰訊的 host, 所以用戶發起請求的時候實際是解析到騰訊的 CDN 伺服器的, CDN 後臺配置一個源站點, 如 www.tanglei.name, 用戶請求到 CDN 伺服器時, 如果沒有命中, 就去源站點請求並將內容緩存至 CDN 伺服器.
  • CDN的原理
    不使用cdn時,利用ip發起請求的過程,如廣州的用戶要請求一個在北京的 IP 地址,過程如下:廣州用戶 -> 廣州伺服器 -> 湖南伺服器 -> 湖北伺服器 -> 北京伺服器這樣傳遞數據,就很浪費時間,那如果廣州伺服器就緩存了數據或資源呢,那不就可以就近獲取了。這便是cdn的部分策略了。備註:TLD,意為頂級域名。
  • 手把手教你自建ETH2的Staking節點(一)其實很簡單,你也行!
    畢竟對於打算長期持有ETH的朋友來說自建節點是最安全穩妥的解決方案,但被人言亦言的高門檻嚇住了,其實是這樣的,ETH2是可以使用Windows伺服器搭建節點的,不僅系統親切的像是家裡的臺式機,而且還可以有一個可以用滑鼠點的好用的UI界面。
  • #收集控#前端JS/CSS靜態資源公共庫免費CDN加速匯總
    為了減輕自己伺服器訪問請求壓力。我們經常會將一些靜態公共庫直接使用第三方CDN加速的。這裡就給大家匯總一下,目前國內外一些比較好使的CDN加速提供商!測試時間:2020年10月18日 – 2020年10月19日以下排名是區分先後的!主要參考:國內訪問情況,提供商背景以及口碑和我自己的使用感受!
  • CDN:什麼是邊緣CDN和虛擬CDN(vCDN)?
    當前大多數CDN伺服器都位於IXP中的PoP點或分布式數據中心,內容可以緩存到更接近最終用戶的位置,這樣一些內容就無需訪問中央源伺服器,而是可以緩存在分布式伺服器中。但是,這些伺服器的分布過於集中,以致內容和遊戲提供商在面對日益增長的需求時,無法確保為最終用戶提供高質量的體驗(QoE)。
  • cdn背後的網站真實IP
    CDN多是伴隨著雲防火牆來一起使用的,這些防火牆會過濾掉大部分惡意的攻擊流量,所以cdn在有這種抵擋攻擊的作用。cdn在防禦拒絕服務攻擊的時候頗有建樹,正好我這裡有一個發生在我身邊的真實案例之前買的一個資源合購類的站點就是這樣,因為侵犯被人利益,所以經常遭受拒絕服務攻擊,實在是不堪其擾後被迫使用了cdn,後來就再也沒有被D成功過。這個例子並不是說cdn一定能防住畢竟很多cdn節點流量並不大,可能自己本身就會被拒絕服務,只是說其在這方面有流量清洗的作用。
  • 前端必需了解的CDN知識
    當使用了CDN時,DNS 伺服器根據用戶 IP 地址,將域名解析成相應節點的緩存伺服器IP位址,實現用戶就近訪問。使用 CDN 服務的網站,只需將其域名解析權交給 CDN 的全局負載均衡(GSLB)設備,將需要分發的內容注入 CDN,就可以實現內容加速了。
  • 5款免費開源自建私人云盤程序 實現網盤自建數據自我掌控
    但是我們有不少的網友文檔比較重要或者是擔心安全問題,往往會選擇網盤自建。我們可以用第三方程序自建私人云盤,這樣既可以確保數據的安全,而且不限制使用。我們有在使用一些免費或者付費網盤的時候,有下載和上傳速度限制、文件大小限制,或者是文件可能被刪除等問題,如果我們是自建私人云盤的話,就不會有這樣的問題。
  • 為了搞清楚CDN的原理,我頭都禿了...
    不使用cdn時,利用ip發起請求的過程,如廣州的用戶要請求一個在北京的 IP 地址,過程如下:廣州用戶 -> 廣州伺服器 -> 湖南伺服器 -> 湖北伺服器 -> 北京伺服器這樣傳遞數據,就很浪費時間,那如果廣州伺服器就緩存了數據或資源呢,那不就可以就近獲取了。這便是cdn的部分策略了。備註:TLD,意為頂級域名。
  • 公器私用--大網際網路自建雲分析
    客戶場景:每年IT開銷上億、擁有專業IT團隊的大型網際網路公司;現狀描述:是不是和為什麼要用自建私有雲,自建私有雲能否持續下去;前景展望:抨擊雲廠商的失職自嗨,描述客戶的真需求和新機會。這些大客戶都很靈活務實,既會自採也在租賃雲廠商的IDC和硬體,所以雲廠商經常詭辯這就是公有雲訂單。
  • 使用Docker搭建poste,自建郵件伺服器
    自建郵件服務可以不受發件量限制,批量發件成本更低,但部署相對複雜,而且容易進垃圾箱。
  • 如何使用伺服器自建圖床
    怎麼利用自己的伺服器搭建圖床呢?
  • 自建CDN實戰經驗合集之——Bind9在內部DNS中的應用
    我們的一些業務場景(自建CDN)也使用到了bind9來作為內部dns。本文主要分享一些bind9的線上業務使用經驗,具體bind9的詳細簡介以及安裝過程,則不再贅述,有興趣的看客可以直接查看bind9官方文檔。https://www.isc.org/bind-9-11-arm/線上採用bind9組建dns集群,為伺服器節點提供解析服務。
  • [網站優化實戰]公共CDN庫/Nginx啟用Gzip/全站CDN加速
    這裡使用的是bootcss網站提供的公共CDN,在將這些公共庫指向bootcss後,這些js文件加載速度到了100ms以內:https://cdn.bootcss.com/axios/0.18.0/axios.min.jshttps://cdn.bootcss.com/moment.js/2.22.2/moment.min.js
  • 搭建直播平臺必須的伺服器都有些什麼分類
    直播中比較常用的伺服器大約有三種,分別是vps 、獨立伺服器和雲伺服器1.vps伺服器可以將一臺伺服器分割成多個虛擬伺服器,這樣用戶在進行使用時,他享受到的是獨立的公網IP位址、不同的vps磁碟空間,獨立的CPU資源、獨立的內存、獨立的作業系統,這能夠使用戶享受到獨佔使用計算資源的體驗。
  • 外貿網站如何使用免費的CDN加速
    >網站打開速度對於一個外貿網站來說相當的重要,決定了你網站前期的流量流存,特別是做付費的時候,如果網站打開速度很慢,將會直接造成推廣費用的浪費,以前的文章中講過:外貿網站測試速度的方法,在這些工具的測試結果裡面會詳細的寫出哪些因素沒有優化好導致網站的打開速度比較慢,比如沒有開啟Gzip,瀏覽器緩存,圖片未壓縮,沒有CDN加速等,今天我們就分享其中的一個:外貿網站如何使用免費的
  • vps等伺服器選購不負責指南
    上一期推薦了自建網盤方案選擇,就有小夥伴留言,有什麼伺服器推薦。
  • 2020年十大 CDN網頁加速 服務
    我個人的感覺是不盡然,之前Jack老師專門寫過一篇文章,講述了bluehost主機和namesilo域名在使用CF的CDN加速服務的時候,會存在無法正確安裝SSL安全證書的情況,(當然,我用實操教程講述了如何解決該問題,有興趣的同學可以去看這篇文章《如何解決bluehost主機使用cloudflare後的 SSL安全證書 的問題》)。
  • cdn技術原理
    CDN網絡是在用戶和伺服器之間增加Cache層,如何將用戶的請求引導到Cache上獲得源伺服器的數據,主要是通過接管DNS實現,下面讓我們看看訪問使用CDN緩存後的網站的過程:  通過上圖,我們可以了解到,使用了CDN緩存後的網站的訪問過程變為:  1)、用戶向瀏覽器提供要訪問的域名;  2)、瀏覽器調用域名解析庫對域名進行解析,由於CDN對域名解析過程進行了調整