redhat6.5系統lnmp架構varnish服務

實驗主機:varnish    172.25.44.1

                    server1    172.25.44.10

                    server2    172.25.44.20

簡介:

varnish : varnish是一款高性能的開源HTTP加速器。

實驗環境:

主機的iptables處於off狀態,setenforce 0

實驗流程:

在server1和server2主機上:

        yum install httpd -y

        cd  /var/www/html/

        echo server1(2)\'s page > index.html

        /etc/init.d/httpd start

   瀏覽器訪問主機IP172.25.44.10和172.25.44.20是否成功。

在varnish主機上:

yum install  varnish-3.0.5-1.el6.x86_64.rpm -y                        #從網上下載再安裝

yum install varnish-libs-3.0.5-1.el6.x86_64.rpm -y                  #從網上下載再安裝

        

            vi /etc/sysconfig/varnish

                VARNISH_LISTEN_PORT=80        #設定varnish的端口爲80

            vi /etc/varnish/default.vcl

               backend server1 {

                .host =  "172.25.44.10" ;       #指定apache所在的主機

                .port = "80";                            #apache端口

                }

            /etc/init.d/varnish start                #啓動varnish服務

            netstat -antlpe                             #查看80端口是否開啓成功

瀏覽器訪問172.25.44.1                        #顯示的是server1主機的信息

            vi /etc/varnish/default.vcl            ##設定查看緩存信息

                    sub vcl_deliver {
                    if (obj.hits > 0) {
                    set resp.http.X-Cache = "HIT from varnish cache";    ##緩存命中
                    }
                    else {
                    set resp.http.X-Cache = "MISS from varnish cache";    ##緩存未命中
                    }
                    return (deliver);
                    }

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

                curl -I 172.25.44.30

                    #如果出現X-Cache : MISS from varnish cache  則表示緩存未命中

                    #如果出現X-Cache : HIT from varnish cache   則表示緩存命中

【緩存無法同步問題】

        緩存不過期頁面無法刷新,通過varnishadm手動清除緩存

    #     varnishadm ban.url .*$        #清除所有

    #     varnishadm ban.url /index.html        #清除index.html頁面緩存

    #     varnishadm ban.url /admin/$            #清除admin目錄緩存

【定義多個不同域名站點的後端服務器】

                vi /etc/varnish/default.vcl

                backend server1 {
                    .host = "172.25.44.20";
                    .port = "80";
                }
                backend westos {
                    .host = "172.25.44.10";
                    .port = "80";
                }

                sub vcl_recv {                ##網頁緩存
                    if (req.http.host ~ "^(www.)?westos.com") {    ##訪問中是否帶www
                    set req.http.host = "www.westos.com";                        都定向到www上
                    set req.backend = westos;            ##訪問的主機
                    } elsif (req.http.host ~ "^(www.)?linux.com") {    ##訪問中是否帶www都定向到www上
                        set req.http.host = "www.linux.com";

                        set req.backend = westos;         
                    } else {error 404 "varnish cache";
                    }
                }

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

    在server1主機上:

        vi /etc/httpd/conf/httpd.conf

                <VirtualHost *:80>
                DocumentRoot /www/westos.com/html
                ServerName www.westos.com
                </VirtualHost>
                <VirtualHost *:80>
                DocumentRoot /www/linux.com/html
                ServerName www.linux.com
                </VirtualHost>
        /etc/init.d/httpd restart

        mkdir -p /www/westos.com/html

        mkdir -p /www/linux.com/html

        echo server1\'s www.westos.com > /www/westos.com/html/index.html

        echo server1\'s www.linux.com > /www/linux.com/html/index.html

        配置做完後在瀏覽器所在的真實主機上

        vim /etc/hosts

        172.25.44.1        www.westos.com

        172.25.44.1        www.linux.com

         172.25.44.1        server1.example.com

    瀏覽器訪問www.westos.com和www.linux.com

【負載均衡器】  

        在server2主機上配置好http的虛擬主機

配置和server1主機一樣

在varnish主機上:

        vi /etc/varnish/default.vcl

            director westoslb round-robin {
                { .backend = server1; }
                { .backend = westos; }
            }
            sub vcl_recv {
                if (req.http.host ~ "^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend = westoslb;
                 return (pass);                ##方便測試,不緩存
                } elsif (req.http.host ~ "^(www.)?linux.com") {

                set req.http.host = "www.linux.com";
                set req.backend = westoslb;
                }

                 elsif (req.http.host ~ "^server1.example.com" ){
                set req.backend = server1;
                }

                else {error 404 "varnish cache";
                }
            }

        /etc/init.d/varnish restart

         瀏覽器訪問網頁,並且不斷刷新

【varnish cdn推送平臺】

        在varnish主機上:

        yum install httpd -y

        vi /etc/httpd/conf/httpd.conf

        Listen 8080    #修改http的端口爲8080,因爲varnish中使用的端口已經是80端口,如果不修改,則httpd服務起不來。

        /etc/init.d/httpd start

        yum install unzip

        unzip bansys.zip -d /var/www/html         #從網上下載獲得

        yum install php -y

        # vi /var/www/html/bansys/config.php    #只保留如下設置,其餘註釋掉

<?php

 ///////////////////////數據庫信息/////////////////////////
 //數據庫信息
# $host = "localhost";
# $user = "";
# $passwd = "";
# $dbname = "bansys";
# $conn = mysql_connect($host, $user, $passwd) or die('Unable to connect database...');
# mysql_select_db($dbname,$conn);
# $query = "select ResourceIP from purgeapp_resource";
# $results = mysql_query($query,$conn);
#
#  while ($row=mysql_fetch_row($results)) {
#         $varnish_host[] =  $row[0];
#   }
# #mysql_close($conn);
////////////////////////////////////////////////////////

 //varnish主機列表
 //可定義多個主機列表
 $var_group1 = array(
                        'host' => array('172.25.44.1'),
                                                'port' => '6082',
                    );

//這個使用了mysql讀取數據                                               
# $var_group3 = array(
#                        'host' => $varnish_host,
#                                               'port' => '6082',                               
#                    );                                          

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

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

vi /etc/varnish/default.vcl

acl bansys {
        "172.25.44.1";
        "172.25.44.0"/24;
}
sub vcl_recv {
        if (req.request == "BAN") {
        if (!client.ip ~ bansys) {
                error 405 "Not allowed.";
        }
        ban("req.url ~ " + req.url);
                error 200 "ban added";
        }


        if (req.http.host ~ "^(www.)?westos.com") {
        set req.http.host = "www.westos.com";
        set req.backend = westoslb;
        #return (pass);
        } elsif (req.http.host ~ "^(www.)?linux.com") {
        set req.http.host = "www.linux.com";

        set req.backend = westoslb;
        }

         elsif (req.http.host ~ "^server1.example.com" ){
        set req.backend = server1;
        }
        else {error 404 "varnish cache";
        }
}
/etc/init.d/httpd restart

/etc/init.d/varnish restart

在瀏覽器的真實主機上:

        curl -I http://www.westos.com/index.html

        #如果出現X-Cache : MISS from varnish cache  則表示緩存未命中

        #如果出現X-Cache : HIT from varnish cache   則表示緩存命中

訪問172.25.44.1/bansys

wKioL1dhWVmAsehHAADa4Rg3uAQ872.png-wh_50

cdn進行推送刷新緩存

curl -I http://www.westos.com/index.html

#緩存刷新成功後爲MISS

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