使用Varnish为web网站加速

news/2024/5/20 11:09:20/文章来源:https://blog.csdn.net/weixin_34375054/article/details/89862560

使用Varnish为网站加速

 

varnish概述

    Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid,性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是Varnish cache设计架构。

监听端口号:6081 

varnish基础概念详解

1)Varnish的特点

1)可以基于内存缓存,也可以在磁盘上缓存如果期望内存大小超过几十个G,比如图片服务器,纯粹使用内存,性能未必好,这时候可以使用磁盘进行缓存,或使用SSD X 2 做RAID1避免磁盘损坏,在实现随机访问上ssd硬盘要比机械硬盘要好的多,如果必须要缓存在磁盘上还是建议使用ssd磁盘

2)可以利用虚拟内存方式,IO性能会非常好

3)支持设置0-60秒精确缓存时间

4)支持VCL其配置是通过vcl编程语言来完成的。其配置需要先转换成C代码,所以使用vcl所写的配置,要先转换成C语言代码,因此要依赖于GCC 临时的编译vcl配置的,编译完之后才能运行起来

5)独特的日志存储及管理机制日志既然保存在内存中,日志可以供多个应用程序所访问,所以一般查看命中率,当前请求有多少get post 方法等等,都需使用专用的工具才可以查看,比如varnishshtopvarnishlog 等命令工具用来查看日志信息

6)支持使用varnish状态引擎通过巧妙的状态引擎的设计完成不同的引擎对用户的请求和缓存代理机制进行处理,用配置文件为状态引擎提供状态法则,完成缓存处理、完成代理处理等等

 

2)varnish缓存数据机制:

wKioL1kjoPmyHjy_AAC_ejQSAYc856.png 

3)Varnish代理VCL处理流程图

wKiom1kjoQbRzxYWAAIlZimQtbs556.png 

处理过程大致分为如下几个步骤:

(1)Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或Pipe,或者进入Lookup(本地查询)。

2)Lookup状态,在缓存中查找用户请求的对象,如果缓存中没有其请求的对象,后续操作很可能会将其请求的对象进行缓存;进入此状态后,会在hash表中查找数据,若找到,则进入Hit命中状态,否则进入miss状态。

3)Pass状态,在此状态下,会进入后端请求,即进入fetch取状态。

4)Fetch状态,在Fetch取状态下,对请求,进行后端的获取,发送请求,获得数据,并进行本地的存储。

5)Deliver提供状态,将获取到的数据发送给客户端,然后完成本次请求。

注:

pass:绕过缓存,即不从缓存中查询内容或不将内容存储至缓存中;

pipe:不对客户端进行检查或做出任何操作,而是在客户端与后端服务器之间建立专用“管道”,并直接将数据在二者之间进行传送;此时,keep-alive连接中后续传送的数据也都将通过此管道进行直接传送,并不会出现在任何日志中;

 

4)总结: 用户通过varnish加速时,有4线路可以获得数据

wKiom1kjoRLCAlAcAAFt9jlpDkU429.png 

 

一:实验目标

实战1:缓存一个网站

实战2:使用varnish缓存多个网站

二:实验环境

Varnish代理服务端  xuegod63   192.168.1.63

       Web服务端  xuegod64   192.168.1.64

       Web服务端  xuegod62   192.168.1.62

三:实验代码

1安装varnish

1)安装varnish软件包

[root@xuegod63 ~]# rpm -ivh varnish-libs-3.0.6-1.el6.x86_64.rpm

[root@xuegod63 ~]# rpm -ivh varnish-3.0.6-1.el6.x86_64.rpm

参数:

--nosignature想要略过数字签名的检查,不检测合法性。因为这个rpm包不是redhat发布的。

-i install  安装

2)vainish各配置文件位置

vcl置文件:

[root@xuegod63 ~]# ls /etc/varnish/default.vcl

varnish主配置文件

[root@xuegod63 ~]# vim /etc/sysconfig/varnish

3)varnish服务:

[root@xuegod63 ~]# /etc/init.d/varnish start

2配置xuegod63成为varnish加速代理服务器

1)配置xuegod63成为varnish服务器

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

###配置一个后端服务器

改:

7 backend default {

8   .host = "127.0.0.1";

9   .port = "80";

10 }

为:

backend web1 {

.host = "192.168.1.64";

.port = "80";

}

###查看缓存命中情况

在:

90 # sub vcl_deliver {

91 #     return (deliver);

92 # }

追加:

sub vcl_deliver {

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT fromxuegodcache";

}

else {

set resp.http.X-Cache = "MISS from xuegodcache";

}

return (deliver);

}

保存退出。

2)配置varnish服务端口

[root@xuegod63 ~]# vim /etc/sysconfig/varnish

改:

66 VARNISH_LISTEN_PORT=6081

为:

VARNISH_LISTEN_PORT=80

3)启动varnish服务器

[root@xuegod63 ~]# /etc/init.d/varnish start

Starting Varnish Cache:                                    [  OK  ]

3、配置xuegod64为后端web服务器

1)配置xuegod64为后端web服务器

[root@xuegod64 ~]# yum install httpd -y

[root@xuegod64 ~]# echo 192.168.1.64 > /var/www/html/index.html#创建首页

2)解决需要开启apache 长链接功能

[root@xuegod64 ~]# vim /etc/httpd/conf/httpd.conf

76 KeepAliveOff

KeepAlive On

2)启动阿帕奇服务器

[root@xuegod64 ~]#service httpd restart#xuegod64上开启web服务器

4实战1:缓存单个web网站

 

1)测试源站点:在浏览器中访问:http://192.168.1.64/

wKiom1kjoSCgL90cAAAe1gLVHKE334.png 

2)测试加速:在浏览器中访问:http://192.168.1.63/

wKioL1kjoSmRQlkeAAAebWMGt1U893.png 

能够正常访问,说明代理设置成功。

 

测试缓存命中:

扩展:curl命令

   curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。

参数:

-I只取http响应头的信息,不取网页内容

 

3)查看启动的web服务器类型

[root@xuegod63 ~]# curl -I 192.168.1.64#在xuegod63上查看xuegod64开启动的web服务器类型

HTTP/1.1 403 Forbidden

Date: Sat, 08 Aug 2015 11:17:49 GMT

Server:Apache/2.2.15 (Red Hat)

Accept-Ranges: bytes

Content-Length: 3985

Connection: close

Content-Type: text/html; charset=UTF-8

4测试缓存命中

[root@xuegod63 ~]# curl -I 192.168.1.63

HTTP/1.1 503 Service Unavailable

Server: Varnish

Content-Type: text/html; charset=utf-8

Retry-After: 5

Content-Length: 419

Accept-Ranges: bytes

Date: Sat, 08 Aug 2015 11:12:20 GMT

X-Varnish: 1141298100

Age: 0

Via: 1.1 varnish

Connection: close

X-Cache:MISS from linuxidc cache#未命中

5再次测试:

[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: 13

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#命中

6varnish服务器基本操作:

[root@xuegod63 ~]# varnishadm ban.url  .*$  #清除所有缓存

[root@xuegod63 ~]# curl -I 192.168.1.63

。。。

X-Cache: MISS from linuxidc cache

[root@xuegod63 ~]# varnishadm ban.url /index.html #清除index.html页面缓

7测试:

[root@xuegod63 ~]# curl -I 192.168.1.63/index.html

[root@xuegod63 ~]#  varnishadm ban.url /admin/$ #清除admin目录缓存

 

实战2:使用varnish加速多个不同域名站点的web服务器

1)配置xuegod62为web2服务器

[root@xuegod62 ~]# yum install httpd -y

[root@xuegod62 ~]# echo 192.168.1.62 > /var/www/html/index.html

[root@xuegod62 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.62  xuegod62.cn

[root@xuegod62 ~]# service httpd restart

2)配置xuegod63 上的varnish服务器:

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

改:

backend web1 {

.host = "192.168.1.64";

.port = "80";

}

为:

backend web1 {

.host = "192.168.1.64";

.port = "80";

}

backend web2 {

.host = "192.168.1.62";

.port = "80";

}

[root@xuegod63 ~]# vim /etc/varnish/default.vcl#在之前的sub vcl_deliver {。。。} 之前,插入以下内容:

sub vcl_recv {

if (req.http.host ~ "^(www.)?xuegod.cn") {

set req.http.host = "www.xuegod.cn";

set req.backend = web1;

} elsif (req.http.host ~ "^bbs.xuegod.cn") {

set req.backend = web2;

}else {error 404 "xuegodcache";

}

}

sub vcl_deliver {

#当访问www.xuegod.cn域名时从web1上取数据,访问bbs.xuegod.cn域名时到web2取数据,访问其他页面报错。

3)重新加载varnish配置文件

[root@xuegod63 ~]# service varnish reload

Loading vcl from /etc/varnish/default.vcl

Current running config name is boot

Using new config name reload_2015-08-08T19:42:11

VCL compiled.

available       2 boot

active         0 reload_2015-08-08T19:42:11

Done

4)测试:网页访问www.xuegod.cn和bbs.xuegod.cn则会显示不同的内容。

xuegod62上测试:

[root@xuegod62 ~]# vim/etc/hosts#添加hosts文件

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.62  xuegod62.cn

192.168.1.63  www.xuegod.cn

192.168.1.63  bbs.xuegod.cn

[root@xuegod62 ~]# yum install elinks -y

[root@xuegod62 ~]# elinks www.xuegod.cn--dump

192.168.1.64

[root@xuegod62 ~]# elinks bbs.xuegod.cn--dump

192.168.1.62

5)测试报错信息:http://192.168.1.63/

wKiom1kjoTjx7mYwAAA9L17ZIRQ205.png










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1928483,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_775561.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从网站抓取数据并在 Excel 中整合

从网站抓取数据并在 Excel 中整合 在本文中,我们将看到下一个练习使用 UiPath 的任务。当您进入公司或作为自由职业者工作时,这将使您了解更多并为实时工作做好准备。在这项任务中,我们更关注数据抓取概念。通过完成这个任务你会学到什么&…

LAMP网站架构各模块配置的分析

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件&a…

减少网站跳转时间,增强网站数据安全——HSTS 详解

近年来随着 Google、Apple、百度等公司不断推动 HTTPS 普及,全网 HTTPS 已是大势所趋。目前多数网站都已经支持 HTTPS 访问,但是在由 HTTP 转向 HTTPS 路程中,不少网站依然会面临很多问题。 通常用户准备访问某个网站时,不会在输入…

酷站设计:学习制作单页网站的10个优秀案例

这篇文章与大家分享10个学习制作单页网站的优秀案例。这些网站使用丰富多彩,令人惊叹的图像和干净的排版。从视差滚动和流畅的动画到固定和干净的菜单,你会发现单页网站的效果真的很酷,令人难忘!享受这些炫目的设计并获得到启发。…

html iframe 设置半透明_防止网站被iframe内框架调用的方法

今天有人反馈了一个在iframe内无法调用网站同一个站点的页面问题并报错,就在网站查了一些相关的资料,整理一下关于禁止网站所有页面或某一个页面被iframe内框架调用的方法。网站iframe内框架调用页面报错如下Refused to display http://xxxxxx.com in a …

mysql运维常见故障_无故障(停机)时间 - MySQL数据库运维的五大指标_数据库技术_Linux公社-Linux系统门户网站...

1.2.无故障(停机)时间运维和开发不一样,开发最重要的是保证一定效率的情况下实现功能,同时程序Bug少。运维讲的是提供稳定服务的时间。用术语来说就是几个9,具体含义就是年度不可服务(不管是主动的还是被动的)时间除以全年时间,百…

使用github构建自己网站

一、本地仓库 1.1、使用git创建版本库 选中源代码文件夹,右击调出菜单,选择创建版本库 建议不要勾选这个框制作纯版本库,直接点确定即可 最后源代码文件夹上出现一个绿色的对号,并且文件夹里面出现了一个.git的新文件夹则表示…

pc端的企业网站(IT修真院test9)详解一个响应式完成的pc端项目

一:引入bootstrap框架 昨天一直被bootstrap栅格系统折磨。 why? 我本来想一边码字,一边学习栅格布局的。but不成功。这时我头脑已经昏了。 下午,我查看了bootstrap的官网,带着我的问题:究竟怎么使用bootstrap的框架…

一个完整的学院网站实现过程

分享 项目介绍 ​ 本项目是东北大学计算机学院网站的一个非官方版本.涉及了前端/后端/数据库/备案/https/域名/服务器等内容 Build Setup # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minific…

[阅读笔记]仅用37行代码构造网站的全文检索

仅用37行代码构造网站的全文检索 英文标题:DotLucene: Full-Text Search for Your Intranet or Website using 37 Lines of Code 原文地址: http://www.codeproject.com/KB/aspnet/DotLuceneSearch.aspx 作者:Dan Letecky在线演示 示例下载(包含索引文件) <?xml:namespace …

30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)

去年八月时要做一个OA系统为了后台界面而烦恼&#xff0c;后来写了一篇博客&#xff08;《后台管理UI的选择》&#xff09;介绍了选择过程与常用后台UI&#xff0c;令我想不到的时竟然有许多开发者与我一样都为这个事情而花费不少时间&#xff0c;最后界面效果还是不佳&#xf…

网站维护必知:网站压力测试

【IT168 专稿】互联网的普及&#xff0c;宽带的流行&#xff0c;使得越来越多的个人和单位都架设了自己的网站。而充当网站的服务器的大多是普通的PC或者低档服务器&#xff0c;这样访问者人数一多或者遭受DDos攻击&#xff0c;很容易造成瘫痪。因此我们需要网站在真正发布前对…

网站验证码制作与调用

后台 一般处理程序生成验证码&#xff1a; 1 public void ProcessRequest(HttpContext context)2 {3 int codeW 80;4 int codeH 22;5 int fontSize 16;6 string chkCode string.Empty;7 //颜色列表&…

如何在ASP.NET中使用验证通过的Windows Live ID用户登录网站

前言 现在有很多在线服务的验证&#xff0c;我曾经就写过一篇 如何在ASP.NET中创建OpenID, 这里我再介绍如何使用Windows Live ID在ASP.NET应用程序中验证用户的身份&#xff0c;说穿了这也是一种特殊验证模型&#xff0c;也就是说当在您的网站中使用Windows Live ID登录时&…

主流网站视频下载

比如想下载 B站&#xff0c;优酷&#xff0c;腾讯视频&#xff0c;芒果&#xff0c;头条&#xff0c;搜狐 等视频网站的视频&#xff0c;我们只需要在URL 前加入这个&#xff1a; https://www.parsevideo.com/#比如这个 B站视频 &#xff1a; https://www.bilibili.com/video…

12个Icon图标资源网站

今天把自己收藏最好的12个Icon图标资源网站整理分享出来。1.除了Icon以外&#xff0c;还有很多不错的UI设计素材。 地址&#xff1a;http://worldui.com/2.除了免费Icon资源下载以外&#xff0c;还提供Icon定制的付费服务。地址&#xff1a;http://dryicons.com/3.很喜欢这个ic…

作为前端你拿什么证明网站体验?

前端重构程序员是一个关注代码同时还要留意体验的异类。代码的优化虽然难&#xff0c;但是有比较多的性能测试工具去证明优化的成果。然而体验这种东西&#xff0c;我们又要如何去证明它的好与坏呢&#xff1f; 一、视觉体验优化 页面加载数据请求图片渲染 二、数据证明体验…

初探SEO关键词竞争程度的智能算法思路

腾讯DeepOcean原创文章&#xff1a;http://dopro.io/seo-intelligent-algorithm.html 在seo优化过程中&#xff0c;关键词尤其重要。一个恰当的关键词往往可以给网站导入非常大的流量&#xff0c;提升网站的曝光量&#xff0c;带来更多目标用户&#xff0c;使网站产品更好的实…

花了两天时间做了一个 deno 的网站,编译了 deno 的 Windows 版本

网站地址: https://deno.js.cn 先上网站截图&#xff1a; 相信很多人都关注了 deno&#xff0c;毕竟是 nodejs 之父的大作。但是官方的编译指南也只是针对 Linux 和 Mac 环境的&#xff0c;如果你有一个可以科学上网的设备&#xff0c;那么只需要按照 readme 就可以顺利的编译…

我在日本最大的房地产信息网站做重构

日本互联网行业现状 去日本之前就对日本互联网产业的各种奇葩现状有所耳闻&#xff0c;自己过来之后更是亲身经历了很多。总的说来有以下几个方面&#xff1a; 总体技术一般&#xff1a; 日本计算机理论研究其实做的非常不错&#xff0c;但是工业运用方面却做的一般&#xff0…