這篇文章主要講解了“如何使用varnish + nginx + lua搭建網(wǎng)站的降級(jí)系統(tǒng)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何使用varnish + nginx + lua搭建網(wǎng)站的降級(jí)系統(tǒng)”吧!
目前創(chuàng)新互聯(lián)建站已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、坪山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
通常一個(gè)網(wǎng)站數(shù)據(jù)庫(kù)掛掉后,后果將是非常嚴(yán)重的。基本上整個(gè)網(wǎng)站基本不可用了。對(duì)于一些網(wǎng)站來(lái)說(shuō),當(dāng)數(shù)據(jù)庫(kù)掛掉后,如果能提供基本的瀏覽服務(wù),也是不錯(cuò)的。本文將嘗試使用 varnish + nginx + lua 搭建網(wǎng)站降級(jí)系統(tǒng)來(lái)實(shí)現(xiàn)整個(gè)目標(biāo)。
降級(jí)方案的目標(biāo)是,當(dāng)網(wǎng)站出現(xiàn)致命故障時(shí)(如出現(xiàn)500錯(cuò)誤,不能提供服務(wù)),可以把緩存的頁(yè)面數(shù)據(jù)展現(xiàn)給用戶。從而提供基本的瀏覽服務(wù)。
只提供基本的瀏覽服務(wù)
瀏覽的數(shù)據(jù)都是非登錄狀態(tài)下的數(shù)據(jù)
支持手動(dòng)和自動(dòng)降級(jí)。自動(dòng)降級(jí)是當(dāng)后端返回500錯(cuò)誤次數(shù)在一段時(shí)間內(nèi)達(dá)到一定閾值(不包含503)。手動(dòng)降級(jí)是從控制界面操作。
使用varnish作為存儲(chǔ)。有效的節(jié)約了物理內(nèi)存,并保持了較好的性能。
使用crond腳本從nginx的access日志中分析出請(qǐng)求url,然后向varnish發(fā)請(qǐng)求,從而更新varnish的緩存。緩存的異步更新,減少對(duì)nginx的壓力。
支持手動(dòng)降級(jí)和自動(dòng)降級(jí)。降級(jí)后,nginx自動(dòng)從varnish中提取數(shù)據(jù),并返回給用戶。

用戶請(qǐng)求到nginx時(shí),nginx會(huì)判斷當(dāng)前是否是降級(jí)狀態(tài)。如果屬于降級(jí)狀態(tài),直接從varnish中獲取數(shù)據(jù)。非降級(jí)狀態(tài),把請(qǐng)求轉(zhuǎn)到php-fpm。
當(dāng)crond腳本請(qǐng)求varnish進(jìn)行緩存數(shù)據(jù)更新時(shí),如果當(dāng)前varnish處于降級(jí)狀態(tài),則不進(jìn)行緩存更新。如果沒(méi)有處在降級(jí)狀態(tài),則把請(qǐng)求轉(zhuǎn)到nginx,獲取數(shù)據(jù)。然后把獲取的數(shù)據(jù)緩存到varnish中。
varnish會(huì)自動(dòng)監(jiān)控后端nginx的狀態(tài)。如果檢測(cè)到nginx已經(jīng)處于降級(jí)狀態(tài),則varnish也會(huì)自動(dòng)進(jìn)入降級(jí)狀態(tài)。
vanish安裝到/home/varnish 目錄下。安裝步驟如下:
首先,安裝libpcre。
sudo yum install pcre pcre-devel
其次,安裝varnish。
./configure --prefix=/home/varnishmakesudo -u admin make installsudo -u admin mkdir -p /home/varnish/vcache/sudo chown admin:admin -R /home/varnishsudo -u admin touch /home/varnish/vcache/varnish_cache.datasudo chmod 777 /home/varnish/vcache/varnish_cache.data
再次,修改varnish配置文件和部署相關(guān)腳本。點(diǎn)擊下載文件壓縮包。配置文件名為default.vcl。
最后,啟動(dòng)varnish。啟動(dòng)腳本也在壓縮包中,名稱為 varnishctl
sudo /home/admin/varnish/sbin/varnishctl start
注意:?jiǎn)?dòng)后可以通過(guò)varnishlog命令查看是否運(yùn)行正常。如果出現(xiàn)以下字樣,說(shuō)明運(yùn)行正常。http的返回狀態(tài)為200
$ /home/varnish/bin/varnishlog0 Backend_health - default Still healthy 4--X-RH 4 2 4 0.002698 0.001722 HTTP/1.1 200 OK
lua腳本在/home/admin/nginx/data/lua目錄下。 確保目錄下有如下幾個(gè)個(gè)腳本。
pc_get_downgrade_data.luainit.luapc_status_stat.luapc_get_status.luapc_set_satus.lua
這幾個(gè)腳本在下載的壓縮包中有。
首先,在http域增加
init_by_lua_file 'lua/init.lua';lua_shared_dict pc_status 1m;lua_shared_dict pc_auto_status 1m;#varnish configupstream varnish{ server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=5s;}最后,在server域宏增加如下配置。
location @php { include fastcgi_params;} location @var { proxy_pass http://varnish$str_params;} location ~* ^(.+\.php)(.*)$ { #check downgrade status, then get data from varnish set $str_params $uri; content_by_lua_file lua/pc_get_downgrade_data.lua;}location /hl_get_auto_status { if ($white_ip = 0) { return 403; } content_by_lua_file lua/pc_get_auto_status.lua; }location /hl_get_status { if ($white_ip = 0) { return 403; } content_by_lua_file lua/pc_get_status.lua;}location /hl_set_status { if ($white_ip = 0) { return 403; } content_by_lua_file lua/pc_set_status.lua;} log_by_lua_file lua/pc_status_stat.lua;腳本varnish_crond.php。在crond中增加執(zhí)行命令。每分鐘執(zhí)行一次。
來(lái)自crond的請(qǐng)求,user-agent數(shù)據(jù)為varnish_crond。把user-agent為varnish_crond請(qǐng)求特殊處理。保證能正常請(qǐng)求,并返回相關(guān)數(shù)據(jù)。
只要讓varnish配置中指定的監(jiān)控腳本check.php返回500錯(cuò)誤即可。varnish監(jiān)控到指定腳本不可用,自動(dòng)會(huì)進(jìn)入降級(jí)狀態(tài)。
當(dāng)腳本返回200狀態(tài)后,varnish自動(dòng)又會(huì)恢復(fù)正常。
設(shè)置降級(jí):
curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_set_status?status=1
恢復(fù)正常:
curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_set_status?status=0
查看降級(jí)狀態(tài):
curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_get_status
如果返回的值為1表示降級(jí)。
感謝各位的閱讀,以上就是“如何使用varnish + nginx + lua搭建網(wǎng)站的降級(jí)系統(tǒng)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何使用varnish + nginx + lua搭建網(wǎng)站的降級(jí)系統(tǒng)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
文章標(biāo)題:如何使用varnish+nginx+lua搭建網(wǎng)站的降級(jí)系統(tǒng)
文章網(wǎng)址:http://www.chinadenli.net/article42/pesdec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、小程序開(kāi)發(fā)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)