潮人地東莞seo博客小編下面跟大家分享關(guān)于seo技術(shù):緩存服務器有那幾種是怎樣(緩存服務器有那幾種會保留用戶緩存)等問題,希望seo專員在做seo優(yōu)化的過程中有所幫助,內(nèi)容僅供參考。
Varnish是一款高性能且開源的反向代理服務器和HTTP加速器。Varnish具有高性能、速度快、管理更加方便等優(yōu)點,現(xiàn)在Varnish迅速發(fā)展,目前很多大型的網(wǎng)站都開始嘗試使用Varnish來代替squid。
Varnish的主要特征:(1)緩存代理位置:可以使用內(nèi)存也可以使用磁盤;支持虛擬內(nèi)存的使用;
(2)有精確的時間管理機制,即緩存的時間屬性控制;
seo博客相關(guān)推薦閱讀:seo優(yōu)化方法之:關(guān)于HTTPS改造的常見問題解析
(3)狀態(tài)引擎架構(gòu):在不同的引擎上完成對不同的緩存和代理數(shù)據(jù)進行處理;
(4)緩存管理:以二叉堆管理緩存數(shù)據(jù),做到數(shù)據(jù)的及時清理;
Varnish 與 Squid 的對比相同點
都是一個反向代理服務器,并且都是開源軟件
Varnish 的優(yōu)勢
(1)穩(wěn)定性:Varnish和Squid在完成相同負載的工作時,Squid服務器發(fā)生故障的幾率要高于Varnish,因為使用Squid需要經(jīng)常重啟;

(2)訪問速度更快:Varnish所有緩存的數(shù)據(jù)都是直接從內(nèi)存中讀取,而Squid是從硬盤中讀取;
(3)支持更多的并發(fā)連接:因為Varnish的TCP連接和釋放的速度比Squid快很多
Varnish 的劣勢
(1)Varnish進程一旦重啟,緩存數(shù)據(jù)都會從內(nèi)存中完全釋放,此時所有請求都會發(fā)送到后端服務器,在高并發(fā)情況下,會給后端服務器造成很大壓力;
(2)在Varnish使用中如果使用單個URL的請求通過負載均衡時,則每次請求都會落在不同的Varnish服務器中,造成請求都會到后端服務器;而且同樣的秦桂在多臺服務器上緩存,也會造成Varnish的緩存資源的浪費,造成性能下降;
Varnish 劣勢的解seo排名優(yōu)化權(quán)威火星推薦決方案
針對劣勢一:在訪問量很大的情況下推薦使用 varnish 的內(nèi)存緩存方式啟動,而且后面需要 跟多臺 squid/nginx 服務器。主要為了防止前面的 varnish 服 務、服務器被重啟的情況下, 大量請求穿透 varnish,這樣 squid/nginx 可以就擔當?shù)诙?CACHE,而且也彌補了 varnish 緩 存在內(nèi)存中重啟都會釋放的問題;
針對劣勢二:可以在負載均衡上做 url 哈希,讓單個 url 請求固定請求到一臺 varnish 服務器 上;
安裝Varnish(這里使用4.x版本)主要是先安裝varnish,然后后端安裝2個web服務器,可以使用Apache。
[root@localhost ~]# yum -y install autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx[root@localhost ~]# tar zxf varnish-4.0.3.tar.gz [root@localhost ~]# cd varnish-4.0.3/[root@localhost varnish-4.0.3]# ./configure && make && make install[root@localhost varnish-4.0.3]# cp etc/example.vcl /usr/loc越秀seo快速排名al/var/varnish///復制Varnish主配置文件 [root@localhost /]# vim /usr/local/var/varnish/example.vcl //編輯Varnish主配置 vcl 4.0; import directors; import std; # Default backend definition. Set this to point to your content server.probe backend_healthcheck { .url="/"; #訪問后端服務器根路徑.interval = 5s; #請求時間間隔.timeout = 1s; #請求超時時間.window = 5; #指定輪詢次數(shù)5次.threshold = 3; #如果出現(xiàn)3次失敗則表示后端服務器異常} backend web1 { #定義后端服務器.host = "192.168.1.7"; #要轉(zhuǎn)向主機(即后端主機)的 IP 或域名.port = "80"; #指定后端服務器的端口號.probe = backend_healthchecseo搜索排名優(yōu)化湖南k; #健康檢查調(diào)用backend_healthcheck定義的內(nèi)容} backend web2 { .host = "192.168.1.8"; .port = "80"; .probe = backend_healthcheck; } acl purgers { #定義訪問控制列表"127.0.0.1"; "localhost"; "192.168.1.0/24"; !"192.168.1.8"; } sub vcl_init { #調(diào)用 vcl_init 初始化子程序創(chuàng)建后端主機組,即 directorsnew web_cluster=directors.round_robin(); #使用 new 關(guān)鍵字創(chuàng)建 drector 對象,使用 round_robin(輪詢) 算法web_cluster.add_backend(web1); #添加后端服務器節(jié)點web_cluster.add_backend(web2); } sub vcl_recv { setreq.backend_hint = web_cluster.backend(); #指定請求的后端節(jié)點web_cluster定義的后端節(jié)點if(req.method == "PURGE") { #判斷客戶端的請求頭部是否是PURGEif(!client.ip ~ purgers) { #如果是,再判斷客戶端的IP地址是不是在ACL訪問控制列表中.return(synth(405, "Not Allowed.")); #如果不是,返回給客戶端405狀態(tài)碼并且返回定義的頁面.} return(purge); #如果是ACL定義的,則交給purge處理.} if(req.method != "GET"&& req.method != "HEAD"&& req.method != "PUT"&& req.method != "POST"&& req.method != "TRACE"&& req.method != "OPTIONS"&& req.method != "PATCH"&& req.method != "DELETE") { #判斷客戶端的請求類型return(pipe); } if(req.method != "GET"&& req.method != "HEAD") { return(pass); #如果不是GET及HEAD則交給pass.} if(req.url ~ "\.(php|asp|aspx|jsp|do|ashx|shtml)($|\?)") { return(pass); #當客戶端訪問的是.php等結(jié)尾的交給pass處理.} if(req.http.Accept-Encoding) { if(req.url ~ "\.(bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)$") { unsetreq.http.Accept-Encoding; #取消客戶端接收的壓縮類型} elseif (req.http.Accept-Encoding ~ "gzip") { setreq.http.Accept-Encoding = "gzip"; #如果有g(shù)zip類型,標記gzip類型.} elseif (req.http.Accept-Encoding ~ "deflate") { setreq.http.Accept-Encoding = "deflate"; } else{ unsetreq.http.Accept-Encoding; #其他未定義的頁面也取消客戶但接收的壓縮類型.} } if(req.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico|gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") { unsetreq.http.cookie; #取消客戶端的cookie值.return(hash); #將請求轉(zhuǎn)發(fā)給hash子程序,也就是查看本地緩存.} if(req.restarts == 0) { #判斷客戶端是不是第一次請求if(req.http.X-Forwarded-For) { #如果是第一次請求,設置獲取客戶端的IP地址.setreq.http.X-Forwarded-For = req.http.X-Forwarded-For + ", "+ client.ip; } else{ setreq.http.X-Forwarded-For = client.ip; } } return(hash); } sub vcl_hash { hash_data(req.url); #查看客戶端請求的頁面,并且進行hashif(req.http.host) { hash_data(req.http.host); #設置客戶端的主機} else{ hash_data(server.ip); #設置服務器的IP} return(lookup); } sub vcl_hit { if(req.method == "PURGE") { #如果是HIT并且當客戶端請求的類型是PURGE返回的200的狀態(tài)碼,并返回相應頁面.return(synth(200, "Purged.")); } return(deliver); } sub vcl_miss { if(req.method == "PURGE") { return(synth(404, "Purged.")); #如果是miss返回404} return(fetch); } sub vcl_deliver { if(obj.hits > 0) { setresp.http.CXK = "HIT-from-varnish"; #設置http頭部X-Cache =hitsetresp.http.X-Cache-Hits = obj.hits; #返回命令的次數(shù)} else{ setresp.http.X-Cache = "MISS"; } unsetresp.http.X-Powered-By; #取消顯示web版本unsetresp.http.Server; #取消顯示varnish服務unsetresp.http.X-Drupal-Cache; #取消顯示緩存的框架unsetresp.http.Via; #取消顯示文件內(nèi)容來源unsetresp.http.Link; #取消顯示HTML的超鏈接地址unsetresp.http.X-Varnish; #取消顯示varnish的idsetresp.http.xx_restarts_count = req.restarts; #設置客戶端請求的次數(shù)setresp.http.xx_Age = resp.http.Age; #顯示緩存文件的時長#set resp.http.hit_count = obj.hits; #顯示緩存命中的次數(shù)#unset resp.http.Age;return(deliver); } sub vcl_pass { return(fetch); #將后端服務器返回的數(shù)據(jù)緩存到本地} sub vcl_backend_response { setberesp.grace = 5m; #緩存額外寬限時間if(beresp.status == 499 || beresp.status == 404 || beresp.status == 502) { setberesp.uncacheable = true; #當后端服務器相應狀態(tài)碼是449等,不緩存} if(bereq.url ~ "\.(php|jsp)(\?|$)") { setberesp.uncacheable = true; #當是PHP的頁面不緩存} else{ if(bereq.url ~ "\.(css|js|html|htm|bmp|png|gif|jpg|jpeg|ico)($|\?)") { setberesp.ttl = 15m; #當是上面結(jié)尾的,緩存15分鐘unsetberesp.http.Set-Cookie; } elseif (bereq.url ~ "\.(gz|tgz|bz2|tbz|zip|rar|mp3|mp4|ogg|swf|flv)($|\?)") { setberesp.ttl = 30m; #緩存30分鐘unsetberesp.http.Set-Cookie; } else{ setberesp.ttl = 10m; #生存時間10分鐘unsetberesp.http.Set-Cookie; } } return(deliver); } sub vcl_purge { return(synth(200,"success")); } sub vcl_backend_error { if(beresp.status == 500 || beresp.status == 501 || beresp.status == 502 || beresp.status == 503 || beresp.status == 504) { return(retry); #如果狀態(tài)碼是上述其中之一,則重新請求} } sub vcl_fini { return(ok); } [root@localhost /]# varnishd -f /usr/local/var/varnish/example.vcl -s malloc,200M -a 0.0.0.0:80//啟動服務
如果重啟Varnishd如下:
第一臺web提供頁面
第二臺
[root@localhost ~]# yum -y install httpd[root@localhost ~]# echo 第二臺 > /var/www/html/index.html[root@localhost ~]# systemctl start httpd
第一次訪問:
第二次訪問即有緩存了
以上是潮人地東莞seo博客跟大家分享關(guān)于seo技術(shù):緩存服務器有那幾種是怎樣(緩存服務器有那幾種會保留用戶緩存)等問題,希望能對大家有所幫助,若有不足之處,請諒解,我們大家可以一起討論關(guān)于網(wǎng)站seo優(yōu)化排名的技巧,一起學習,以上內(nèi)容僅供參考。