隨着跨境貿易的發展以及一帶一路倡議的鋪開,愈來愈多的中國企業須要走出去,去開拓海外用戶。因爲線下的生產廠家在國內,因此海外用戶能看到的門面也就一個企業官網網站了,可是不少官網的服務器多是位於國內的,在海外打開就會像咱們打開一個海外網站同樣,速度慢到絕望啊!php
藉着雖然不是一帶一路成員國但卻毗鄰大量一帶一路沿線國家的印度-孟買地域開通之際,咱們就來試試如何實現企業官網的海外加速吧。html
這裏介紹的海外加速就是開通一個臨近海外消費者的服務器,而後選擇同步數據或者進行鏡像緩存,同步數據和附件的話其實費用仍是蠻高昂的,通常來講選擇鏡像緩存也就是反向代理就能夠。nginx
若是針對的是海外的華人消費者,那麼中文網站直接反代就行,若是是歪果仁的花,能夠考慮在新加坡地域創建一個英文版源站(畢竟英文再全球仍是蠻通行的),而後在南美洲、歐洲、中東等地域創建服務器進行反代就行。git
須要使用到的產品: 阿里雲ECS 海外地域github
經過本文你將講學到: Nginx、OpenResty 的反向代理、全靜態緩存、緩存清理、內容替換、CC防護解決方案數據庫
若是按標準的來建一個海外站點,那就得搭建一個如出一轍的環境,而後實時同步數據庫和附件,不過這樣作成本過高了。通常的話,咱們能夠考慮使用反向代理,將網站的內容作一個鏡像到海外服務器。這個作法也應用於不少的地方門戶,好比能夠將客戶提供的一個廣告專題經過反代到網站目錄中,看起來就像是網站本身作的專題,搜索引擎也會優先收錄這個專題頁面。後端
爲了保障這個反代教程的可用性,咱們還須要額外的幾個模塊,若是參考上述教程已經安裝過 OpenResty 的朋友,能夠編譯升級 OpenResty 來增長模塊。參考:【雲計算的1024種玩法】手把手教你如何編譯升級 OpenResty緩存
沒有安裝 Nginx 能夠參考:《【雲計算的1024種玩法】手把手教你如何編譯一個高性能 OpenResty》 直接按下面的增長模塊進去就行:服務器
關於地域的選擇,阿里雲的16個節點最適合服務哪些地域還能夠參考個人專題:阿里雲全球十六個節點評測分析dom
參與聚能聊: 由新開的第16個數據中心,來評價阿里雲的全球化部署,一塊兒討論阿里雲的全球戰略贏得豐厚獎品!
須要添加的是:(若是不參考後面的進階教程,其實能夠跳過添加模塊)
ngx_cache_purge - 緩存刷新擴展,值得一提的是如今由 nginx-modules
繼續維護的新版本,原做者FRiCKLE
從14年提供 2.3 版本後就再也不進行更新,國內不少教程都是用的 FRiCKLE
舊版。
replace-filter-nginx-module - Nginx替換過濾文本模塊,OpenResty 提供的模塊,不過因爲尚處於 RC 階段因此沒有歸入 OpenResty 主線。
1、添加版本變量
NgxCachePurgeVersion='2.4.2';
2、下載源碼
cd /root/src wget https://github.com/nginx-modules/ngx_cache_purge/archive/$NgxCachePurgeVersion.tar.gz tar xzf $NgxCachePurgeVersion.tar.gz git clone https://github.com/openresty/replace-filter-nginx-module.git
3、編譯依賴
git clone https://github.com/openresty/sregex.git cd sregex make && makeinstall
4、編譯 OpenResty
參考全新安裝教程或者編譯升級教程,在 ./configure
參數中中的 --add-module=../ngx_pagespeed-$PageSpeedVersion-beta \
後添加:
--add-module=../ngx_cache_purge-$NgxCachePurgeVersion \ --add-module=../replace-filter-nginx-module \
升級的花稍微麻煩點,須要殺進程而後安裝替換二進制文件
1、建立緩存目錄,用以加速靜態資源的訪問
mkdir /data/cache/path -p mkdir /data/cache/temp chmod -R www-data /data/cache
2、修改 /usr/local/openresty/nginx/conf/nginx.conf 文件,在 http{}
最後加入:
proxy_temp_path /data/cache/path; proxy_cache_path /data/cache/temp levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=10g; # 500m爲最大內存佔用,10g爲最大磁盤佔用,7d是7天無訪問刪除
3、建立虛擬主機配置文件,以下:
yourdomian.conf
是虛擬主機配置文件名稱,改成域名就行,例如:www.mf8.biz.conf
server_name yourdomian;
中的 yourdomian
改成和反向代理的原網站同樣的域名就行,例如原網站是 https://www.mf8.bi 那就是 www.mf8.biz
root /data/wwwroot/yourdir;
中的 yourdir
也改爲網站域名就行,都是能夠自定義的
重要:
proxy_pass http://反代域名;
將 http://反代域名
換成本身須要反代的域名便可
若是須要考慮 HTTPS,請參考:《【雲計算的1024種玩法】10分鐘輕鬆設置出 A+ 評分的 HTTP/2 網站》
cat >> /usr/local/openresty/nginx/conf/vhost/yourdomian.conf << EOF server { ##運行端口 listen 80; ##這裏須要改爲你的域名 server_name yourdomian; index index.html index.htm index.php; #首頁文件優先級 access_log /data/wwwlogs/access_nginx.log combined; #日誌目錄 location / { proxy_cache_key "$scheme://$host$request_uri"; #緩存key規則,用於自動清除緩存。 proxy_cache cache_one; #緩存區名稱,與前面定義的相同 proxy_cache_valid 200 304 4h; #正常狀態緩存 4 小時 proxy_cache_valid 301 3d; # 301狀態緩存3天 proxy_cache_valid any 10s; #其餘狀態緩存(如502 404)10秒 proxy_pass http://反代域名; #指定後端ip或者網址,能夠加端口 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #向後端傳遞訪客真實ip proxy_set_header Referer http://example.com; #強制定義Referer,程序驗證判斷會用到,修改成反代域名 proxy_set_header Host $host; #定義主機頭 #proxy_cache_use_stale invalid_header error timeout http_502; #當後端出現錯誤、超時、502狀態時啓用過時緩存,謹慎用。 } EOF
經過這一個方法能夠製做出一個徹底靜態的網站來,從而避免了動態請求,若是網站忽然遭遇 CC 攻擊能夠考慮經過這個方式來應對,攻擊者就沒法請求動態內容了。
以前咱們設置的是全靜態的緩存,若是被反代的網站修改了內容並不會在這個反代的網站是顯示的,由於有緩存。那麼咱們就要刷新緩存,在虛擬主機配置文件中添加這一段:
location ~ /purge(/.*) { allow 127.0.0.1; #容許訪問刷新緩存的 IP proxy_cache_purge cache_one $host$1$is_args$args; }
這樣訪問 https://www.mf8.biz/logo.png
,OpenResty 就會去請求 https://www.mf8.biz/logo.png
,保存存在就輸出。
若是源站的 logo.png 咱們進行了更新,則須要刷新緩存,訪問海外的 https://www.mf8.biz/logo.png
,就會提示 Successful purge
,若是這個文件沒有被緩存過,則提示404 Not Found
不少教程用的是 ngx_http_substitutions_filter_module
不過 replace-filter-nginx-module
更好用,並且和 OpenResty 更配,等穩定了就會融入主線都不須要從新添加這個模塊了。
在虛擬主機配置文件的反代 location{}
中添加:
replace_filter 米飯粑 雲棲社區 ig;
意思是將 米飯粑
全文替換爲 雲棲社區
,後面的 i
表示 不區分大小寫
,g
表示 全文搜索並替換
更多用法:https://github.com/openresty/replace-filter-nginx-module#replace_filter
這樣咱們就打造好了一個功能完備的 OpenResty 反向代理了。