Varnish4.0实战 | 部署 | 后端服务器缓存 | 负载均衡 | 按域名访问 |CDN 推送

蔚落 2023-08-17 16:24 190阅读 0赞

一、部署varnish

实验环境

  1. 172.25.1.1 varnish
  2. 172.25.1.2 后端服务器
  3. 172.25.1.3 后端服务器

部署
Varnish 官网: http://varnish-cache.org/

Varnish 4.0 安装说明网址:https://packagecloud.io/varnishcache/varnish40/install\#manual-rpm

以 RHEL7 为例:

  1. yum install pygpgme yum-utils
  2. #配置 yum 源,注意里面的 7 是我的系统版本,el 指的是红帽系统
  3. vim /etc/yum.repos.d/varnishcache_varnish40.repo
  4. [varnishcache_varnish40]
  5. name=varnishcache_varnish40
  6. baseurl=https://packagecloud.io/varnishcache/varnish40/el/7/$basearch
  7. repo_gpgcheck=1
  8. gpgcheck=0
  9. enabled=1
  10. gpgkey=https://packagecloud.io/varnishcache/varnish40/gpgkey
  11. sslverify=1
  12. sslcacert=/etc/pki/tls/certs/ca-bundle.crt
  13. metadata_expire=300
  14. [varnishcache_varnish40-source]
  15. name=varnishcache_varnish40-source
  16. baseurl=https://packagecloud.io/varnishcache/varnish40/el/7/SRPMS
  17. repo_gpgcheck=1
  18. gpgcheck=0
  19. enabled=1
  20. gpgkey=https://packagecloud.io/varnishcache/varnish40/gpgkey
  21. sslverify=1
  22. sslcacert=/etc/pki/tls/certs/ca-bundle.crt
  23. metadata_expire=300

更新yum缓存

  1. yum -q makecache -y --disablerepo='*' --enablerepo='varnishcache_varnish40'

去网上下载一个 jemalloc ,安装varnish需要年这个依赖

  1. rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm

安装 varnish4.0 版本

  1. yum install varnish-devel.x86_64 varnish.x86_64 -y

二、实现单个后端服务器缓存

1、修改varnish策略

  1. vim /etc/varnish/default.vcl
  2. backend default {
  3. .host = "172.25.1.2"; #后端服务器IP
  4. .port = "80"; #后端服务器端口
  5. }
  6. sub vcl_deliver {
  7. if (obj.hits > 0) {
  8. set resp.http.X-Cache = "访问的是varnish端";
  9. }else {
  10. set resp.http.X-Cache = "访问的是server2端";
  11. }
  12. return (deliver);
  13. }

在这里插入图片描述
在这里插入图片描述

  1. vim /etc/varnish/varnish.params
  2. ####修改
  3. VARNISH_LISTEN_PORT=80 # varnish端口

在这里插入图片描述
重启

  1. systemctl restart varnish

2、后端服务器安装Apache

  1. yum install httpd -y
  2. echo 'httpd' > /var/www/html/index.html
  3. systemctl start httpd

3、测试

  • 注:本实验测试机都是任意机

    curl -I 172.25.1.1

  • 第一次curl,可以看到Age=0,缓存时间为0,访问的是后端服务器

在这里插入图片描述

  • 第二次第三次,可以看到Age不等于0,这是缓存了多久,可以看到访问的是varnish缓存端

在这里插入图片描述

  • 清理所有缓存

    varnishadm ban req.url “~” /

  • 清楚页面缓存

    varnishadm ban req.url “~” /index.html

三、多个域名访问不同服务器

1、修改varnish策略

  1. vim /etc/varnish/default.vcl
  2. ###############修改
  3. backend web1 {
  4. .host = "172.25.1.2";
  5. .port = "80";
  6. }
  7. backend web2 {
  8. .host = "172.25.1.3";
  9. .port = "80";
  10. }
  11. sub vcl_recv {
  12. if (req.http.host ~ "^(www.)?server.org"){
  13. set req.http.host = "www.server.org";
  14. set req.backend_hint = web1;
  15. return(pass); #不缓存,可以删去
  16. } elseif (req.http.host ~ "^bbs.server.org") {
  17. set req.http.host = "bbs.server.org";
  18. set req.backend_hint = web2;
  19. }else{
  20. return (synth(405));
  21. }
  22. }

在这里插入图片描述
在这里插入图片描述

2、测试

  • 在测试机上添加本地解析(实验缘故,没有办法)

    vim /etc/hosts

    ##写入

    172.25.1.1 server1 www.server.org server.org bbs.server.org

在这里插入图片描述

  • 测试

在这里插入图片描述

四、负载均衡功能

此时工作在七层应用层,其实不太好,要多做一整套三次握手,负担加倍

1、修改varnish策略

  1. vim /etc/varnish/default.vcl
  2. ################仅需以下部分
  3. import directors from "/lib64/varnish/vmods/libvmod_directors.so"; #倒入负载均衡模块
  4. backend web1 {
  5. .host = "172.25.1.2";
  6. .port = "80";
  7. }
  8. backend web2 {
  9. .host = "172.25.1.3";
  10. .port = "80";
  11. }
  12. sub vcl_init {
  13. new lb=directors.round_robin();
  14. lb.add_backend(web1);
  15. lb.add_backend(web2);
  16. }
  17. sub vcl_recv {
  18. if (req.http.host ~ "^(www.)?server.org"){
  19. set req.http.host = "www.server.org";
  20. set req.backend_hint = lb.backend();
  21. return(pass); #不缓存
  22. } elseif (req.http.host ~ "^bbs.server.org") {
  23. set req.http.host = "bbs.server.org";
  24. set req.backend_hint = web2;
  25. }else{
  26. return (synth(405));
  27. }
  28. }

在这里插入图片描述

在这里插入图片描述
重启

  1. systemctl restart varnish

2、测试

在这里插入图片描述

五、Apache虚拟主机

在server2端

1、编辑Apache配置目录

  1. vim /etc/httpd/conf.d/vhost.conf
  2. ###########写入
  3. <VirtualHost *:80>
  4. DocumentRoot /www
  5. ServerName www.server.org
  6. </VirtualHost>
  7. <Directory "/www">
  8. require all granted
  9. </Directory>
  10. <VirtualHost *:80>
  11. DocumentRoot /bbs
  12. ServerName bbs.server.org
  13. </VirtualHost>
  14. <Directory "/bbs">
  15. require all granted
  16. </Directory>

在这里插入图片描述

2、添加发布内容

  1. mkdir /www
  2. echo 'www' > /www/index.html
  3. mkdir /bbs
  4. echo 'bbs' > /bbs/index.html
  5. systemctl restart httpd

在这里插入图片描述

3、测试

  • 虚拟主机成功

在这里插入图片描述

六、CDN网页清理缓存

在varnish端

  1. yum install httpd php -y

拥有以下安装包:
在这里插入图片描述
解压:

  1. [root@server1 ~]# unzip bansys.zip -d /var/www/html/
  2. -bash: unzip: command not found
  3. [root@server1 ~]# yum whatprovides unzip
  4. Loaded plugins: product-id, search-disabled-repos, subscription-
  5. : manager
  6. This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
  7. unzip-6.0-16.el7.x86_64 : A utility for unpacking zip files
  8. Repo : rhel7.3
  9. yum install unzip-6.0-16.el7.x86_64 -y

将解压文件放到Apache发布目录下:

  1. cd /var/www/html/
  2. mv bansys/* .

在这里插入图片描述

修改推送包配置文件:

  1. vim config.php

在这里插入图片描述
留下以下内容:
在这里插入图片描述
修改Apache端口:

  1. vim /etc/httpd/conf/httpd.conf
  2. systemctl start httpd

在这里插入图片描述
浏览器访问:
在这里插入图片描述

配置varnish配置文件

  1. vim /etc/varnish/default.vcl
  2. #######写入
  3. acl server {
  4. "127.0.0.1";
  5. "172.25.1.0/24"; #0这个网段的ip
  6. }
  7. sub vcl_recv {
  8. if(req.method == "BAN"){
  9. if (!client.ip ~ server){
  10. return(synth(405,"Puring not allowed for" + client.ip));
  11. }
  12. ban("req.url ~ " + req.url);
  13. return(purge);
  14. }
  15. }

重启

  1. systemctl restart varnish

浏览器推送测试:

shell命令使varnish端产生缓存
在这里插入图片描述
浏览器清理缓存

  • .* 代表清理所有缓存
    在这里插入图片描述
    在这里插入图片描述

缓存清理成功!
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读