溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

varnish服務(wù)yum安裝及不同域名站點

發(fā)布時間:2020-06-23 20:59:04 來源:網(wǎng)絡(luò) 閱讀:471 作者:無雙戰(zhàn)績 欄目:云計算
開啟三臺虛擬機
實戰(zhàn):使用varnish加速多個不同域名站點的web服務(wù)器
varnish:192.168.80.100           //需要聯(lián)網(wǎng)
web1:192.168.80.101——www.aa.com
web2:192.168.80.102——www.bb.com
三臺服務(wù)器全都要操作
systemctl stop firewalld      //關(guān)閉防火墻
setenforce 0                       //關(guān)閉監(jiān)控
yum安裝varnish
cd /etc/yum.repos.d/
mv back/* ./

varnish服務(wù)yum安裝及不同域名站點

1.安裝varnish(從Centos7開始,varnish已被收入到epel倉庫)
yum   install epel-release -y            //需要聯(lián)網(wǎng)
yum -y install varnish
2.新建varnish用戶
useradd -M -s /sbin/nologin varnish
3.varnish配置文件
vi /etc/varnish/varnish.params         //主配置文件

varnish服務(wù)yum安裝及不同域名站點

vi /etc/varnish/default.vcl            //VCL配置文件
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);
}
}
判斷當訪問www.aa.com域名時從web1上取數(shù)據(jù),訪問www.bb.com域名是到web2取數(shù)據(jù)。

varnish服務(wù)yum安裝及不同域名站點

#添加一個Header標識,以判斷緩存是否命中
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);
}

varnish服務(wù)yum安裝及不同域名站點

重啟varnish
systemctl restart varnish
vi /etc/hosts
192.168.80.100   www.aa.com
192.168.80.100   www.bb.com
yum install -y elinks          //安裝elinks   
elinks  www.aa.com  --dump   #elinks文本界面瀏覽器

varnish服務(wù)yum安裝及不同域名站點

或者:在windows中查找

varnish服務(wù)yum安裝及不同域名站點
varnish服務(wù)yum安裝及不同域名站點

在另一臺虛擬機搭建一個web服務(wù)器:web1(80.101)
yum install httpd -y            //安裝http
vi /etc/httpd/conf/httpd.conf
把 ServerName www.example.com:80 前面的#刪除
vi /var/www/html/index.html
<h2>server 1</h2>

systemctl start httpd
在另一臺虛擬機搭建一個web服務(wù)器:web2(80.102)
yum install httpd -y            //安裝http
vi /etc/httpd/conf/httpd.conf
把 ServerName www.example.com:80 前面的#刪除
vi /var/www/html/index.html
<h2>server 2</h2>

systemctl start httpd
最后在瀏覽器上輸入www.bb.com

varnish服務(wù)yum安裝及不同域名站點

————————————————————————————————————————

VCL
Varnish Configuration Language (VCL) 是一種動態(tài)語言,是varnish配置語言,用來描述請求處理和制定緩存策略。vcl配置內(nèi)容由manager process 創(chuàng)建的VCC子進程轉(zhuǎn)換成C語言代碼,再經(jīng)由gcc編譯成共享對象,最后裝載到cacher process中生效。

VCL文件被分為多個子程序,不同的子程序在不同的時間里執(zhí)行,比如一個子程序在接到請求時執(zhí)行,另一個子程序在接受到后端服務(wù)器傳送的文件時執(zhí)行。
VCL處理流程圖

varnish服務(wù)yum安裝及不同域名站點

處理過程大致分為如下幾個步驟
1、Receive狀態(tài):請求處理的入口狀態(tài),根據(jù)VCL規(guī)則判斷該請求應(yīng)該是Pass或Pipe或者進入Lookup(本地查詢)
?
2、Lookup狀態(tài),在緩存中查找用戶請求的對象,如果緩存中沒有其請求的對象,后續(xù)操作很可能會將其請求的對象進行緩存;進入此狀態(tài)后,會在hash表中查找數(shù)據(jù),若找到,則進入Hit(命中)狀態(tài),否則進入miss狀態(tài)
?
3、Pass狀態(tài),在此狀態(tài)下,會進入后端(源服務(wù)器)請求,即進入fetch狀態(tài),不走緩存
?
4、Fetch狀態(tài),在Fetch狀態(tài)下,對請求,進行后端的獲取,發(fā)送請求,獲得源服務(wù)器的數(shù)據(jù),并進行本地的存儲
?
5、Deliver提供狀態(tài),將獲取到的數(shù)據(jù)發(fā)送給客戶端,然后完成本次請求。
?
注:
Pass:繞過緩存,既不從緩存中查詢內(nèi)容或不將內(nèi)容存儲至緩存中;
?
Pipe:不對客戶端進行檢測或作出任何操作,而是在客戶端與后端服務(wù)器之間建立專用“管道”,并直接將數(shù)據(jù)在二者之間進行傳送;此時,keep-alive連接中后續(xù)傳送的數(shù)據(jù)都將通過此管道進行直接傳送,并不會出現(xiàn)在任何日志中。

語法
  (1)支持注釋  // # /* */
  (2)不支持循環(huán)
  (3)sub $name:用于定義子例程
        sub vcl_recv {

        }
  (4)有眾多內(nèi)置的變量,變量的可調(diào)用位置與state engine有密切相關(guān)性
  (5)支持終止語句,return(action),沒有返回值
  (6)"域"專用
  (7)操作符 =,==,!,&&,||
常用語句
  if     else
  set name=value  
  unset name
  req.http.HEADER:調(diào)用請求報文中http協(xié)議的指定的變量
  req.request:請求方法

varnish變量種類
req——請求
resp——響應(yīng)
client——客戶端
server——服務(wù)端
bereq——向后端請求時產(chǎn)生的req
beresp——后端響應(yīng)時產(chǎn)生的resp
obj——項目對象
storage——大小

常用變量:

bereq和req:
bereq(req).http.HEADERS: 由varnish發(fā)往backend server的請求報文的指定首部;
bereq(req).request:請求方法;
bereq(req).url: 請求路徑
bereq(req).proto: 請求協(xié)議
bereq(req).backend:指明要調(diào)用的后端主機;
?
beresp和resp
beresp.proto:響應(yīng)使用的協(xié)議
beresp.status:響應(yīng)的狀態(tài)碼
beresp.reason:原因短語;
beresp.backend.ip:響應(yīng)的后端ip地址
beresp.backend.name:響應(yīng)的后端域名
beresp.http.HEADER: 從backend server響應(yīng)的報文的首部;
beresp.ttl:后端服務(wù)器響應(yīng)的內(nèi)容的余下的生存時
?
obj
obj.ttl: 對象的ttl值;
obj.hits:此對象從緩存中命中的次數(shù);
?
server
server.ip
server.hostname
?
CDN

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI