Varnish反向代理

準備工作

準備一臺本機作爲測試機,三臺虛擬機:
server1:172.25.24.1
server2:172.25.24.2
server3:172.25.24.3
作爲服務器

1.配置反向代理

VCL處理
處理過程大致分爲如下幾個步驟:
(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或
Pipe,或者進入 Lookup(本地查詢)。
(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,否則進
入 miss 狀態。
(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。
(4)Fetch 狀態,在 Fetch 狀態下,對請求進行後端的獲取,發送請求,獲得數據,並進行本地
的存儲。
(5)Deliver 狀態, 將獲取到的數據發送給客戶端,然後完成本次請求。

在代理服務器server1上

##安裝varnish軟件包
yum install varnish-3.0.5-l.e16.x86_64.rpm varnish-libs-3.0.5-l.e16.x86_64.rpm
##查看varnish配置文件,查看其工作環境
vim /etc/sysconfig/varnish 

在這裏插入圖片描述


##向系統聲明varnish所需的工作環境
vim /etc/security/limits.conf
varnish         -       nofile          131072
varnish         -       memlock         82000
varnish         -       nproc           unlimited

在這裏插入圖片描述

##配置varnish服務
vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.24.2";  ##指定默認後臺服務器爲172.25.24.2
  .port = "80";				##指定連接端口爲80
}

##配置varnish服務端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80   ##第66行,修改端口爲80

/etc/init.d/varnish restart   ##重啓varnish服務

在這裏插入圖片描述
在這裏插入圖片描述

在默認後臺服務器server2上

##下載httpd服務並設置默認發佈頁內容爲server2
yum install httpd -y
vim /var/www/html/index.html
server2:www.westos.org
/etc/init.d/httpd start

在測試機上:

##當我們訪問172.25.24.1時,看到的是server2的網頁,說明實驗成功
[root@foundation24 ~]# curl 172.25.24.1
server2:www.westos.org

在這裏插入圖片描述

2.查看緩存命中的情況

在代理服務器server1上

vim /etc/varnish/default.vcl 
sub vcl_deliver {
if (obj.hits>0){
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X0Cache = "MISS from westos cache";
}
return (deliver);
}

/etc/init.d/varnish reload

在這裏插入圖片描述

##緩存的刷新:
varnishadm ban.url .*$				    ##清除所有
varnishadm ban.url  /index.html   ##清除index.html網頁緩存
varnishadm ban.url /admin/$		##清除admin目錄緩存

測試:
在測試機上

##可以從X0Cache:欄看出緩存情況
##X0Cache: MISS from westos cache 說明沒有緩存
##X-Cache: HIT from westos cache 說明數據來源來自緩存
curl -I 172.25.24.1

在這裏插入圖片描述
在這裏插入圖片描述

##先在代理服務器上清楚緩存
curl  -I 172.25.24.1/index.html

在這裏插入圖片描述

在這裏插入圖片描述

3.定義不同站點的後端服務器

通過域名反向代理會把你帶到不同的後端服務器

在代理服務器上

vim /etc/varnish/default.vcl 
backend web1 {
  .host = "172.25.24.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.24.3";
  .port = "80";
}
##當訪問 www.westos.org 域名時從 web1 上取數據,訪問 bbs.westos.org 域名時到 web2 取數據,
訪問其他頁面報錯。
sub vcl_recv {
        if (req.http.host ~"^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend = web1;
}elsif (req.http.host ~"^bbs.westos.org"){
                set req.backend = web2;
}else {
                error 404 "error";
}
}

/etc/init.d/varnish reload

在這裏插入圖片描述
在這裏插入圖片描述

在後臺服務器server3上

yum install httpd -y
vim /var/www/html/index.html
server3:bbs.westos.com

在測試端:

##配置本地解析
[root@foundation24 ~]# vim /etc/hosts
172.25.24.1 server1 www.westos.org bbs.westos.org westos.org

##通過域名反向代理會把你帶到不同的後端服務器
[root@foundation24 ~]# curl westos.org
server2:www.westos.com
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.com

在這裏插入圖片描述

4.負載均衡配置:

1)什麼是負載均衡:
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

2)負載均衡的作用:
(1)解決併發壓力,提高應用處理性能(增加吞吐量,加強網絡處理能力);

(2)提供故障轉移,實現高可用;

(3)通過添加或減少服務器數量,提供網站伸縮性(擴展性);

(4)安全防護;(負載均衡設備上做一些過濾,黑白名單等處理)

3)負載均衡的搭建
在代理服務器上

[root@server1 varnish]# vim /etc/varnish/default.vcl 


backend web1 {
  .host = "172.25.24.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.24.3";
  .port = "80";
}

director lb round-robin {  ###把多個後端聚合爲一個組,實現輪循
        { .backend = web1;}
        { .backend = web2;}
}


sub vcl_recv {
        if (req.http.host ~"^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend = lb;
                return (pass);  ##不記錄緩存,測試的時候打開,但是在實際工作的時候是要記錄緩存來緩解後臺服務器的壓力的
}elsif (req.http.host ~"^bbs.westos.org"){
                set req.backend = web2;
}else {
                error 404 "error";
}
}

在這裏插入圖片描述

在這裏插入圖片描述

在server3服務器上

##配置兩臺httpd虛擬主機並分別設置兩臺虛擬主機默認發佈頁面信息
[root@server3 html]# mkdir /www
[root@server3 html]# cd
[root@server3 ~]# cd /www/
[root@server3 www]# vim index.html
server3:www.westos.org

[root@server3 www]# mkdir /bbs
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html
server3:bbs.westos.org
##開啓httpd虛擬主機功能
[root@server3 bbs]# vim /etc/httpd/conf/httpd.conf 
 990 NameVirtualHost *:80  ##開啓虛擬主機

1003 <VirtualHost *:80>
1004     DocumentRoot /www
1005     ServerName www.westos.org
1006 </VirtualHost>
1007 <VirtualHost *:80>
1008     DocumentRoot /bbs
1009     ServerName bbs.westos.org
1010 </VirtualHost>

[root@server3 bbs]# /etc/init.d/httpd restart

在這裏插入圖片描述

在測試機上:

##訪問www.westos.org網頁可以看到訪問的服務器是在server2與server3循環輪換的

[root@foundation24 ~]# curl www.westos.org
server2:www.westos.org
[root@foundation24 ~]# curl www.westos.org
server3:www.westos.org
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.org

在這裏插入圖片描述

5.varnish cdn 推送平臺

在代理服務器server1上:

##下載php,uzip,http服務並將推送平臺壓縮包解壓到http共享目錄下
[root@server1 ~]# yum install unzip php httpd -y
[root@server1 ~]# unzip bansys.zip -d /var/www/html/
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# mv bansys/* .

##編輯php文件,只保留如下設置,其餘註釋掉
[root@server1 html]# vim config.php 

<?php
 //varnish主機列表
 //可定義多個主機列表
 $var_group1 = array(
                        'host' => array('172.25.24.1'),
                                                'port' => '8080', 
                    );

 //varnish羣組定義
 //對主機列表進行綁定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group1,
                     );


 //varnish版本
 //2.x和3.x推送命令不一樣
 $VAR_VERSION = "3";

?>
##bansys 有兩種工作模式,分別是:telnet 和 http 模式。
##telnet 模式需要關閉 varnish 服務管理端口的驗證,註釋掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。
##如果是 http 模式需要對 varnish 做以下設置:
[root@server1 html]# vim /etc/varnish/default.vcl 

acl westos {
#設置訪問控制
"127.0.0.1";
"172.25.24.0"/24;
}


backend web1 {
  .host = "172.25.24.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.24.3";
  .port = "80";
}

director lb round-robin {
        { .backend = web1;}
        { .backend = web2;}
}

sub vcl_recv {
        if (req.request == "BAN") {
                if (!client.ip ~ westos) {
                        error 405 "Not allowed.";
                }
                ban("req.url ~ " + req.url);
                error 200 "ban added";
                }
}


sub vcl_recv {
        if (req.http.host ~"^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend = lb;
                #return (pass);     ##開啓緩存功能
}elsif (req.http.host ~"^bbs.westos.org"){
                set req.backend = web2;
}else {
                error 404 "error";
}
}
[root@server1 html]# /etc/init.d/varnish reload

進行推送:

(1)打開瀏覽器,訪問172.25.24.1:8080端口
firefox
172.25.24.1:8080
在這裏插入圖片描述

(2)選擇HTTP

在這裏插入圖片描述

(3)輸入推送內容,並提交,推送成功:

/index.html

在這裏插入圖片描述

測試:通過CDN推送手動刷新緩存
(1)在測試機上:

##由於緩存功能開啓所以在一定時間內訪問www.westos.org/index.html得到的內容都是來自緩存
[root@foundation24 varnish]# curl www.westos.org/index.html
server2:www.westos.org

在這裏插入圖片描述

(2)在服務器server1上重新推送/index.html
(3)再在測試機上訪問www.westos.org/index.html

##由於手動推送將緩存刷新,再次訪問進入了其他的後臺服務器
[root@foundation24 varnish]# curl www.westos.org/index.html
server3:www.westos.org

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章