三臺(tái)虛擬機(jī)都要做
systemctl stop firewalld //關(guān)閉防火墻
setenforce 0 //關(guān)閉監(jiān)控
80.101
yum install -y httpd
vi /etc/httpd/conf/httpd.conf
找到ServerName www.example.com:80吧#去掉
vi /var/www/html/index.html
server 1
systemctl start httpd
80.102
yum install -y httpd
vi /etc/httpd/conf/httpd.conf
找到ServerName www.example.com:80吧#去掉
vi /var/www/html/index.html
server 2
systemctl start httpd
1.安裝varnish(從Centos7開(kāi)始,varnish已被收入到epel倉(cāng)庫(kù))
cd /etc/yum.repos.d/
mv back/* ./
yum install epel-release -y //需要聯(lián)網(wǎng)
yum -y install varnish
十年的泉港網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整泉港建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“泉港網(wǎng)站設(shè)計(jì)”,“泉港網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
2.新建varnish用戶(hù)
useradd -M -s /sbin/nologin varnish
?
3.varnish配置文件
/etc/varnish/varnish.params 主配置文件
/etc/varnish/default.vcl VCL配置文件
VCL
Varnish Configuration Language (VCL) 是一種動(dòng)態(tài)語(yǔ)言,是varnish配置語(yǔ)言,用來(lái)描述請(qǐng)求處理和制定緩存策略。vcl配置內(nèi)容由manager process 創(chuàng)建的VCC子進(jìn)程轉(zhuǎn)換成C語(yǔ)言代碼,再經(jīng)由gcc編譯成共享對(duì)象,最后裝載到cacher process中生效。
?
VCL文件被分為多個(gè)子程序,不同的子程序在不同的時(shí)間里執(zhí)行,比如一個(gè)子程序在接到請(qǐng)求時(shí)執(zhí)行,另一個(gè)子程序在接受到后端服務(wù)器傳送的文件時(shí)執(zhí)行。
?
?
VCL處理流程圖
?
?
?
處理過(guò)程大致分為如下幾個(gè)步驟
1、Receive狀態(tài):請(qǐng)求處理的入口狀態(tài),根據(jù)VCL規(guī)則判斷該請(qǐng)求應(yīng)該是Pass或Pipe或者進(jìn)入Lookup(本地查詢(xún))
?
2、Lookup狀態(tài),在緩存中查找用戶(hù)請(qǐng)求的對(duì)象,如果緩存中沒(méi)有其請(qǐng)求的對(duì)象,后續(xù)操作很可能會(huì)將其請(qǐng)求的對(duì)象進(jìn)行緩存;進(jìn)入此狀態(tài)后,會(huì)在hash表中查找數(shù)據(jù),若找到,則進(jìn)入Hit(命中)狀態(tài),否則進(jìn)入miss狀態(tài)
?
3、Pass狀態(tài),在此狀態(tài)下,會(huì)進(jìn)入后端(源服務(wù)器)請(qǐng)求,即進(jìn)入fetch狀態(tài),不走緩存
?
4、Fetch狀態(tài),在Fetch狀態(tài)下,對(duì)請(qǐng)求,進(jìn)行后端的獲取,發(fā)送請(qǐng)求,獲得源服務(wù)器的數(shù)據(jù),并進(jìn)行本地的存儲(chǔ)
?
5、Deliver提供狀態(tài),將獲取到的數(shù)據(jù)發(fā)送給客戶(hù)端,然后完成本次請(qǐng)求。
?
注:
Pass:繞過(guò)緩存,既不從緩存中查詢(xún)內(nèi)容或不將內(nèi)容存儲(chǔ)至緩存中;
?
Pipe:不對(duì)客戶(hù)端進(jìn)行檢測(cè)或作出任何操作,而是在客戶(hù)端與后端服務(wù)器之間建立專(zhuān)用“管道”,并直接將數(shù)據(jù)在二者之間進(jìn)行傳送;此時(shí),keep-alive連接中后續(xù)傳送的數(shù)據(jù)都將通過(guò)此管道進(jìn)行直接傳送,并不會(huì)出現(xiàn)在任何日志中。
?
?
語(yǔ)法
(1)支持注釋 // # / /
(2)不支持循環(huán)
(3)sub $name:用于定義子例程
sub vcl_recv {
}
(4)有眾多內(nèi)置的變量,變量的可調(diào)用位置與state engine有密切相關(guān)性
(5)支持終止語(yǔ)句,return(action),沒(méi)有返回值
(6)"域"專(zhuān)用
(7)操作符 =,==,!,&&,||
?
?
常用語(yǔ)句
?
if else
set name=value
unset name
req.http.HEADER:調(diào)用請(qǐng)求報(bào)文中http協(xié)議的指定的變量
req.request:請(qǐng)求方法
?
varnish變量種類(lèi)
req——請(qǐng)求
resp——響應(yīng)
client——客戶(hù)端
server——服務(wù)端
bereq——向后端請(qǐng)求時(shí)產(chǎn)生的req
beresp——后端響應(yīng)時(shí)產(chǎn)生的resp
obj——項(xiàng)目對(duì)象
storage——大小
?
常用變量:
bereq和req:
bereq(req).http.HEADERS: 由varnish發(fā)往backend server的請(qǐng)求報(bào)文的指定首部;
bereq(req).request:請(qǐng)求方法;
bereq(req).url: 請(qǐng)求路徑
bereq(req).proto: 請(qǐng)求協(xié)議
bereq(req).backend:指明要調(diào)用的后端主機(jī);
?
beresp和resp
beresp.proto:響應(yīng)使用的協(xié)議
beresp.status:響應(yīng)的狀態(tài)碼
beresp.reason:原因短語(yǔ);
beresp.backend.ip:響應(yīng)的后端ip地址
beresp.backend.name:響應(yīng)的后端域名
beresp.http.HEADER: 從backend server響應(yīng)的報(bào)文的首部;
beresp.ttl:后端服務(wù)器響應(yīng)的內(nèi)容的余下的生存時(shí)
?
obj
obj.ttl: 對(duì)象的ttl值;
obj.hits:此對(duì)象從緩存中命中的次數(shù);
?
server
server.ip
server.hostname
?
?
cdn
?
?
實(shí)戰(zhàn):使用varnish加速多個(gè)不同域名站點(diǎn)的web服務(wù)器
?
varnish:192.168.80.100
web1:192.168.80.101——www.aa.com
web2:192.168.80.102——www.bb.com
?
?
?
?
vi /etc/varnish/default.vcl
backend web1 {
.host = "192.168.80.101";
.port = "80";
}
backend web2 {
.host = "192.168.80.102";
.port = "80";
}
sub vcl_recv{
if (req.http.host ~ "(?i)^(www.)?aa.com$") {
set req.http.host = "www.aa.com";
set req.backend_hint = web1;
} elsif (req.http.host ~ "(?i)^www.bb.com$") {
set req.backend_hint = web2;
return(hash);
}
}
判斷當(dāng)訪問(wèn)www.aa.com域名時(shí)從web1上取數(shù)據(jù),訪問(wèn)www.bb.com域名是到web2取數(shù)據(jù)。
#添加一個(gè)Header標(biāo)識(shí),以判斷緩存是否命中
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT FROM" + req.http.host;
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache = "MISS FROM" + req.http.host;
}
return (deliver);
}
systemctl restart varnish //重啟varnish
?
vi /etc/hosts
192.168.80.100 www.aa.com
192.168.80.100 www.bb.com
?
?
yum install -y elinks
elinks www.aa.com --dump #elinks文本界面瀏覽器
?
注有問(wèn)題改這里
vi varnish.params