为什么要使用缓存:
访问过的数据会再次被访问到,热数据多次访问。
一个数据被访问过会后,离他最近的或者较近的客户端再次访问。
既然要缓存, 需要读取的高速,最好的方法,就是全部放到内存。
常见的内存数据库,memcached,redis,HANA。
但是对于页面,全放放到内存,太不现实,内存+高速缓存盘的方式来存储缓存。
Key-value,key存放于内存,value存放磁盘。
一种数据形式:key value
Key:对访问路径,URL,特定的特征,进行hash计算得出的结果,这种key存放于内存中。
Value:页体,我们用户真正得到的内容,一般存放在高速硬盘。
凡是与缓存缓存相关的,离不开两体:内存,高速硬盘。
常见的术语:
命中:能从缓存取出数据,如果是一台web站点,那么你的缓存服务器将是一台最前端服务器。
命中率:命中次数/(命中次数+非命中次数)。
热数据:经常被访问的数据。
内存缓存空间,磁盘缓存空间。
清理:定期清理,LRU(不常用的,最老的一类数据将其删除),定期更新(purge)。
缓存对象:用户信息,cookies,交易信息,页面内存,统统理解为object。
一、安装varnish
[root@xuegod63 ~]# yum install autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx graphviz -y
[root@xuegod63 ~]# tar xf varnish-6.0.3.tgz
[root@xuegod63 ~]# cd varnish-6.0.3/
[root@xuegod63 varnish-6.0.3]# ./configure --prefix=/usr/local/varnish
[root@xuegod63 ~]# make && make install
vcl置文件
[root@xuegod63 ~]# cd /usr/local/varnish/
[root@xuegod63 varnish]# mkdir etc
[root@xuegod63 varnish]# cp share/doc/varnish/example.vcl etc/default.vcl
二、缓存一个网站
实战:配置xuegod63成为 varnish服务器加速xuegod64 web服务器
配置xuegod63成为 varnish服务器
[root@xuegod63 ~]# cd /usr/local/varnish/etc/
[root@xuegod63 ~]# vim efault.vcl
配置一个后端服务器
改:
16 backend default {
17 .host = "127.0.0.1";
18 .port = "80";
19 }
为:
16 backend web1 {
17 .host = "192.168.1.64";
18 .port = "80";
19 }
查看缓存命中情况:
改:
35 sub vcl_deliver {
36 # Happens when we have all the pieces we need, and are about to send the
37 # response to the client.
38 #
39 # You can do accounting or modifying the final object here.
40 }
为:
35 sub vcl_deliver {
36 if (obj.hits > 0) {
37 set resp.http.X-Cache = "HIT from xuegod cache";
38 }
39 else {
40 set resp.http.X-Cache = "Miss from xuegod cache";
41 }
42 return (deliver);
43 }
保存退出。
配置varnish环境变量
[root@xuegod63 ~]# vim /etc/profile.d/varnish.sh
export PATH=/usr/local/varnish/bin:/usr/local/varnish/sbin:$PATH
[root@xuegod63 ~]# . /etc/profile.d/varnish.sh
启动varnish服务器
[root@xuegod63 ~]# varnishd -a 192.168.1.63:80,HTTP -f /usr/local/varnish/etc/default.vcl
配置xuegod64 为web服务器
[root@xuegod64 ~]# yum install httpd -y
[root@xuegod64 ~]# echo 192.168.1.64 > /var/www/html/index.html #创建首页
[root@xuegod64 ~]# systemctl restart httpd #在xuegod64上开启web服务器
测试源站点:
在浏览器中访问:http://192.168.1.64/
测试加速:
在浏览器中访问:http://192.168.1.63/
能够正常访问,说明代理设置成功。
测试缓存命中
扩展:curl命令
curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。
参数:
-I只取http响应头的信息,不取网页内容
例:
[root@xuegod63 ~]# curl -I 192.168.1.64 #在xuegod63上查看xuegod64开启动的web服务器类型
HTTP/1.1 200 OK
Date: Tue, 04 Dec 2024 08:33:31 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 04 Dec 2024 08:28:08 GMT
ETag: "d-57c2e0b9e7ead"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
实例2:测试缓存命中
[root@xuegod63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Date: Tue, 04 Dec 2024 08:34:19 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 04 Dec 2024 08:28:08 GMT
ETag: "d-57c2e0b9e7ead"
Content-Length: 11
Content-Type: text/html; charset=UTF-8
X-Varnish: 32773
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS from xuegod cache #未命中
Connection: keep-alive
再次测试:
[root@xuegod63 ~]# curl -I 192.168.1.63
。。。
X-Cache: HIT from xuegod cache #有命中
如图出现还是没有命中的情况下:
[root@xuegod63 ~]# curl -I 192.168.1.63
。。。
X-Cache: MISS from linuxidc cache #还是没有命中
解决需要开启apache 长链接功能
[root@xuegod64 ~]# vim /etc/httpd/conf/httpd.conf
改: 76 KeepAlive Off
为: KeepAlive On
注意:如果 httpd.conf文件中没有KeepAlive Off,则需要手动添加。
[root@xuegod64 ~]# service httpd restart
再次测试:
[root@xuegod63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sat, 08 Aug 2015 11:21:11 GMT
ETag: "25f61-d-51ccaf318dbb9"
Content-Type: text/html; charset=UTF-8
Content-Length: 11
Accept-Ranges: bytes
Date: Sat, 08 Aug 2015 11:28:36 GMT
X-Varnish: 1141298120
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from linuxidc cache
[root@xuegod63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sat, 08 Aug 2015 11:21:11 GMT
ETag: "25f61-d-51ccaf318dbb9"
Content-Type: text/html; charset=UTF-8
Content-Length: 11
Accept-Ranges: bytes
Date: Sat, 08 Aug 2015 11:28:37 GMT
X-Varnish: 1141298121 1141298120
Age: 1
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from linuxidc cache #命中
varnish服务器基本操作:
[root@xuegod63 ~]# curl -I 192.168.1.63
。。。
X-Cache: MISS from linuxidc cache
[root@xuegod63 ~]# varnishadm -S /etc/varnish/secret -T 192.168.1.63:80 'ban req.url ~ /index.html' #清除index.html页面缓存。
[root@xuegod63 ~]# varnishadm -S /etc/varnish/secret -T 192.168.1.63:80 'ban req.url ~ /index/' #也可以清除目录。
测试:
[root@xuegod63 ~]# curl -I 192.168.1.63/index.html