配置varnish加速你的web网络

2024-01-22 12:08
文章标签 配置 web 网络 加速 varnish

本文主要是介绍配置varnish加速你的web网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.CDN(内容分发网络)

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,
使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

关于CDN原理以及varnish相互之间本质关系请戳这里!!!

2.简述varnish

 在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。

3、varnish系统架构

varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。

Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。

Child进程包含多种类型的线程,常见的如:

Acceptor线程:接收新的连接请求并响应;

Worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;

Expiry线程:从缓存中清理过期内容;

Varnish依赖“工作区(workspace)”以降低线程在申请或修改内存时出现竞争的可能性。在varnish内部有多种不同的工作区,其中最关键的当属用于管理会话数据的session工作区。

4、工作流程:

  • 当varnish上没有缓存时:
    在这里插入图片描述

  • 当varnish上有缓存数据的时候:
    在这里插入图片描述

5、varnish的后端存储

varnish的缓存对象在每次服务重启时都会被清空并重新建立,所以这些服务器都是不应该随便去重启的,varnish为了把数据更持久化的存储,引入了更多的存储机制,所以varnish支持多种不同的后端存储.varnish支持多种不同类型的后端存储,这可以在varnishd启动时使用-s选项指定。后端存储的类型包括:

(1)file: 使用特定的文件存储全部的缓存数据,并通过操作系统的mmap()系统调用将整个缓存文件映射至内存区域(如果条件允许);

(2) malloc: 使用malloc()库调用在varnish启动时向操作系统申请指定大小的内存空间以存储缓存对象;

(3)persistent(experimental): 与file的功能相同,但可以持久存储数据(即重启varnish数据时不会被清除);仍处于测试期;

varnish无法追踪某缓存对象是否存入了缓存文件,从而也就无从得知磁盘上的缓存文件是否可用,因此,file存储方法在varnish停止或重启时会清除数据。 而persistent方法的出现对此有了一个弥补,但persistent仍处于测试阶段,例如目前尚无法有效处理要缓存对象总体大小超出缓存空间的情况,所以,其仅适用于有着巨大缓存空间的场景。

选择使用合适的存储方式有助于提升系统性,从经验的角度来看,建议在内存空间足以存储所有的缓存对象时使用malloc的方法,反之,file存储将有着更好的性能的表现。然而,需要注意的是,varnishd实际上使用的空间比使用-s选项指定的缓存空间更大,一般说来,其需要为每个缓存对象多使用差不多1K左右的存储空间,这意味着,对于100万个缓存对象的场景来说,其使用的缓存空间将超出指定大小1G左右。另外,为了保存数据结构等,varnish自身也会占去不小的内存空间。

5、实验过程

Varnish学习需要注意的要素:

1、Varnish要安装在64的系统上
2、Varnish使用内存做缓存大小为2G,基本就可以了;无论是memcache还是varnish基于内存做缓存都不宜太大,太大没有好处,它有一个临界值,如果缓存设置太小,那么数据缓存会频繁被清除掉;如果缓存设置太大的,那么缓存会永久存放,有些过期的也不会被清除掉,并且数据过多的查找起来也慢。建议Varnish缓存设置大小为1G-2G之间就可以了。

安装包:

 jemalloc-3.6.0-1.el7.x86_64.rpm      ###安装varnish依赖包varnish-3.0.5-1.el7.x86_64.rpm  varnish-libs-3.0.5-1.el7.x86_64.rpm

实验环境:

  • 关闭防火墙和selinux
  • 需要两台虚拟机+一台主机
主机名IP服务
server2192.168.13.6apache
server1192.168.13.129varnish
主机192.168.13.1apache

1.varnish的安装与基础配置

1.配置varnish服务端

#1.下载varnish安装包及依赖包

  [root@server1 mnt]# lsvarnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm	jemalloc-3.6.0-1.el7.x86_64.rpm

#2、安装varnish软件

[root@server1 mnt]# yum install -y  *

#3、查看配置文件

   [root@server1 mnt]# rpm -qc varnish/etc/logrotate.d/varnish/etc/sysconfig/varnish/etc/varnish/default.vcl

在这里插入图片描述

#4.配置varnish服务端口
[root@server1 mnt]# vim /etc/sysconfig/varnish 
###################
66 VARNISH_LISTEN_PORT=80     #默认后端服务器为80(在浏览网址时默认访问的就是80端口,此时便无需在后边加80,形如: www.baidu.com:80)

在这里插入图片描述

#5.查看配置文件参数
[root@server1 mnt]# vim 

在这里插入图片描述

#查看系统能打开的最大文件
[root@server1 mnt]# sysctl -a | grep file
fs.file-nr = 448	0	47361
fs.file-max = 47361`

在这里插入图片描述

1.varnish服务能打开的最大文件数目远远超过系统能打开的最大文件
#查看系统剩余内存
[root@server1 mnt]# free -mtotal       used       free     shared    buffers     cached
Mem:           490        190        299          0         11        125
-/+ buffers/cache:         54        436
Swap:          991          0        991

增加内存:在这里插入图片描述
#再次查看系统能打开的最大文件

[root@server1 ~]# sysctl -a | grep file
fs.file-nr = 384	0	188466
fs.file-max = 188466

在这里插入图片描述
#7.更改主配置文件:制作调度器

[root@server1 ~]# vim /etc/varnish/default.vcl
#################7 backend default {8   .host = "172.25.66.2";        ##server2的ip9   .port = "80";10 }

在这里插入图片描述

#8.重启varnish服务 
[root@server1 ~]# /etc/init.d/varnish restart
Stopping Varnish Cache:                                    [  OK  ]
Starting Varnish Cache:                                    [  OK  ]

2.配置后端服务器

#1.安装apahce
[root@server2 ~]# yum install -y httpd
#2.开启apache
[root@server2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.2 for ServerName[  OK  ]
#3.编写默认发布文件
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
[root@server2 html]# vim index.html
####################
<h1>www.westos.org ---- server2</h1>

在这里插入图片描述

#4.重启apache
[root@server2 html]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.2 for ServerName[  OK  ]

测试:

(1).在物理机上

[root@foundation66 ~]# curl 172.25.66.1
<h1>www.westos.org ---- server2</h1>

(2).在网页上

输入: 172.25.66.1
在这里插入图片描述
2.查看缓存命中情况
配置varnish服务端:

#1.更改主配置文件
[root@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.X-Cache = "MISS from westos cache";
}
return (deliver);
}

在这里插入图片描述
#2.重新加载配置

[root@server1 ~]# /etc/init.d/varnish reload
Loading vcl from /etc/varnish/default.vcl
Current running config name is boot
Using new config name reload_2019-01-24T14:02:25
VCL compiled.available       2 boot
active          0 reload_2019-01-24T14:02:25Done

测试:

只有第一次访问没有命中缓存,之后再访问都会命中缓存

[root@foundation66 ~]# curl -I 172.25.66.1

在这里插入图片描述

 [root@foundation66 ~]# curl -I 172.25.66.1

在这里插入图片描述

 [root@foundation66 ~]# curl -I 172.25.66.1

在这里插入图片描述
缓存的清理:

#1.清理所有缓存
[root@server1 ~]# varnishadm ban.url .*$
#测试:
[root@foundation66 ~]# curl -I 172.25.66.1

#2.清理某个网页的缓存(注意:访问方式改变了)

#第一次访问未命中缓存,之后再访问都能命中缓存
[root@foundation66 ~]# curl -I 172.25.66.1/index.html
在这里插入图片描述

#2.清理某个网页的缓存(注意:访问方式改变了)#第一次访问未命中缓存,之后再访问都能命中缓存
[root@foundation66 ~]# curl -I 172.25.66.1/index.html

在这里插入图片描述

#清理网页index.html缓存
[root@server1 ~]# varnishadm ban.url /index.html

3.配置多个后端服务器
1.配置varnish服务端

#1.编写主配置文件:配置调度器

[root@server1 ~]# vim /etc/varnish/default.vcl
#################
backend web1 {.host = "172.25.66.2";     # 后端服务器1(server2).port = "80";
}backend web2 {.host = "172.25.66.3";    # 后端服务器2(server3).port = "80";
}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 "westos cache";}
}

在这里插入图片描述
注意:要注释掉命中缓存情况的设定 在这里插入图片描述
#2.重新加载配置

[root@server1 ~]# /etc/init.d/varnish reload

2.配置后端服务器

[root@server3 ~]# yum install -y httpd
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# ls
# 编写apache默认发布文件
[root@server3 html]# vim index.html
####################
<h1>bbs.westos.org  ---- server3</h1>

在这里插入图片描述

[root@server3 html]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.3 for ServerName[  OK  ]

3.本地解析

#本地解析:便于直接访问域名,无需访问ip

[root@foundation66 ~]# vim /etc/hosts
######################
172.25.66.1 server1 www.westos.org bbs.westos.org

测试:

访问www.westos.org时,调度server2结点,当访问bbs.westos.org时,调度server3结点

[root@foundation66 ~]# curl www.westos.org
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl bbs.westos.org
<h1>bbs.westos.org ---- server3</h1

4.负载均衡

1.配置varnish服务端

#1.编写主配置文件[root@server1 ~]# vim /etc/varnish/default.vcl
#################
#配置负载均衡lb
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;
} elsif (req.http.host ~ "^bbs.westos.org") {set req.backend = web2;
} else {error 404 "westos cache";}
}

在这里插入图片描述

#2.重新加载
[root@server1 ~]# /etc/init.d/varnish reload

测试:

发现此时并没有实现负载均衡,因为有缓存

#此时没有实现负载均衡,因为有缓存[root@foundation66 ~]# curl www.westos.org
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl www.westos.org
<h1>www.westos.org ---- server2</h1>

解决方案:清理缓存

#2).更改配置文件
[root@server1 ~]# vim /etc/varnish/default.vcl
#################27    return (pass);    #不进行缓存(跳过缓存)

在这里插入图片描述
#重新加载

[root@server1 ~]# /etc/init.d/varnish reload

测试:

#此时便不会有缓存干扰,实现了负载均衡
[root@foundation66 ~]# curl www.westos.org
<h1>www.westos.org ---- server2</h1>
[root@foundation66 ~]# curl www.westos.org
<h1>bbs.westos.org ---- server3</h1>

5.同一台主机上定义多个域名
1.配置后端服务器

#1.更改配置文件
[root@server3 html]# vim /etc/httpd/conf/httpd.conf 
####################
990 NameVirtualHost *:80       #打开虚拟主机端口<VirtualHost *:80>             #定义虚拟主机1DocumentRoot /www          #定义根目录ServerName www.westos.org
</VirtualHost> <VirtualHost *:80>             #定义虚拟主机2DocumentRoot /bbs          #定义根目录ServerName bbs.westos.org
</VirtualHost>

在这里插入图片描述

#2.重启apache
[root@server3 html]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: Warning: DocumentRoot [/www] does not exist
Warning: DocumentRoot [/bbs] does not exist
httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.3 for ServerName[  OK  ]
#3.建立根目录
[root@server3 html]# mkdir /www
[root@server3 html]# mkdir /bbs
[root@server3 html]# cd /www/
[root@server3 www]# ls
#4.编写发布文件1
[root@server3 www]# vim index.html
###################
<h1>www.westos.org ---- server3</h1>

在这里插入图片描述

[root@server3 www]# cd /bbs/
[root@server3 bbs]# ls
#5.编写发布文件2
[root@server3 bbs]# vim index.html
###################
<h1>bbs.westos.org ---- server3</h1>

在这里插入图片描述

#6.重启apache
[root@server3 bbs]# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.3 for ServerName[  OK  ]

2.本地解析

[root@foundation66 ~]# vim /etc/hosts
######################
172.25.66.1 server1 
172.25.66.3 server3 bbs.westos.org www.westos.org

在这里插入图片描述
测试:

当访问不同的域名时,访问的是同一个主机,即实现了同一台主机上定义多个域名

[root@foundation66 ~]# curl www.westos.org
<h1>www.westos.org ---- server3</h1>
[root@foundation66 ~]# curl bbs.westos.org
<h1>bbs.westos.org ---- server3</h1>

在这里插入图片描述
6.web界面的制作

web界面:也是实现清理缓存的一种方式,但与之前最大的不同在于:它可以批量,高效的清理缓存

安装包:

bansys.zip

配置varnish服务端:

#1.下载安装包
[root@server1 ~]# cd /mnt
[root@server1 mnt]# ls
bansys.zip  varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

#报错:因为没有unzip命令

[root@server1 mnt]# unzip bansys.zip -d /var/www/
-bash: unzip: command not found
#2.安装unzip apache php等(用到了php语言)
[root@server1 mnt]# yum install -y unzip httpd php
#3.解压,-d表示解压路径
[root@server1 mnt]# unzip bansys.zip -d /var/www/html
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 html]# cd bansys/
[root@server1 bansys]# pwd
/var/www/html/bansys
[root@server1 bansys]# ls
class_socket.php  config.php  index.php  purge_action.php  static

#4.定义varnish主机列表和群组

[root@server1 bansys]# vim config.php 
######################
$var_group1 = array('host' => array('172.25.66.1'),             #本机ip'port' => '8080',   #不能写80端口,因为varnish服务已经占用了80端口);          
$VAR_CLUSTER = array('www.westos.org' => $var_group1,           #   );

在这里插入图片描述
#5.更改apache的端口;因为varnish已经占用了80端口

[root@server1 bansys]# vim /etc/httpd/conf/httpd.conf 
#####################136 Listen 8080#6.重启apache
[root@server1 bansys]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.66.1 for ServerName[  OK  ]#7.两者皆可查看端口,查看到apache的端口是否更改为8080
[root@server1 bansys]# netstat -tnlp

在这里插入图片描述
网页测试:

输入:172.25.66.1:8080
bansys里的内容没有共享:

[root@server1 bansys]# pwd
/var/www/html/bansys
#8.将bansys里的所有内容移动到/var/www/html/(apahce默认发布目录)中,以达到共享的目的
[root@server1 bansys]# mv * ../
[root@server1 bansys]# cd ..
[root@server1 html]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static

再次测试:此时便可以查看到推送界面

输入:172.25.66.1:8080

在这里插入图片描述

#9.配置varnish访问控制
[root@server1 bansys]# vim /etc/httpd/conf/httpd.conf 
###################### 定义允许推送的主机ip
acl westos {          
"127.0.0.1";              #本机可以访问  
"172.25.66.0"/24;         #66网段均可访问
}# 若不在允许ip列表中则报错
sub vcl_recv {if (req.request == "BAN"){if (!client.ip ~ westos) {error 405 "Not allowed.";}ban("req.url ~ " + req.url);error 200 "ban added";}
}

在这里插入图片描述

[root@foundation66 Desktop]# curl -I www.westos.org

在这里插入图片描述

[root@foundation66 Desktop]# curl -I www.westos.org

在这里插入图片描述
网页推送:相当于批量清除缓存
在这里插入图片描述

这篇关于配置varnish加速你的web网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632905

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码