使用Varnish代替Squid做网站缓存加速器的详细解决方案

news/2024/5/9 15:25:59/文章来源:https://blog.csdn.net/iteye_3753/article/details/82433715

源:http://blog.s135.com/post/313/


[文章作者:张宴 本文版本:v1.2 最后修改:2008.01.02转载请注明出处:http://blog.s135.com]

  我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。

  今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。

  在我看来,使用Varnish代替Squid的理由有三点:
  1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
  2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
  3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。

  点击在新窗口中浏览此图片



   下面来安装Varnish网站缓存加速器(Linux系统):
  1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /var/vcache
chmod +w /var/vcache
chown -R www:www /var/vcache


  2、创建Varnish日志目录(/var/logs/):
mkdir -p /var/logs
chmod +w /var/logs
chown -R www:www /var/logs


  3、编译安装varnish:
wgethttp://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install


  4、创建Varnish配置文件:
vi /usr/local/varnish/vcl.conf

  输入以下内容:
引用
backend myblogserver {
set backend.host = "192.168.0.5";
set backend.port = "80";
}

acl purge {
"localhost";
"127.0.0.1";
"192.168.1.0"/24;
}

sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
lookup;
}

if (req.http.host ~ "^blog.s135.com") {
set req.backend = myblogserver;
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
else {
lookup;
}
}
else {
error 404 "Zhang Yan Cache Server";
lookup;
}
}

sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}

sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
}

sub vcl_fetch {
if (req.request == "GET" && req.url ~ "\.(txt|js)$") {
set obj.ttl = 3600s;
}
else {
set obj.ttl = 30d;
}
}

  这里,我对这段配置文件解释一下:
  (1)、Varnish通过反向代理请求后端IP为192.168.0.5,端口为80的web服务器;
  (2)、Varnish允许localhost、127.0.0.1、192.168.0.***三个来源IP通过PURGE方法清除缓存;
  (3)、Varnish对域名为blog.s135.com的请求进行处理,非blog.s135.com域名的请求则返回“Zhang Yan Cache Server”;
  (4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
  (5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。

  5、启动Varnish
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on


  6、启动varnishncsa用来将Varnish访问日志写入日志文件:
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/varnish.log &


  7、配置开机自动启动Varnish
vi /etc/rc.local

  在末尾增加以下内容:
引用
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &


  8、优化Linux内核参数
vi /etc/sysctl.conf

  在末尾增加以下内容:
引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000



   再看看如何管理Varnish:
  1、查看Varnish服务器连接数与命中率:
/usr/local/varnish/bin/varnishstat

   点击在新窗口中浏览此图片

  2、通过Varnish管理端口进行管理:
  用help看看可以使用哪些Varnish命令:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help

引用
Available commands:
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
help [command]
url.purge
dump.pool


  3、通过Varnish管理端口,使用正则表达式批量清除缓存:
  (1)、例:清除类似 http://blog.s135.com/a/zhangyan.html 的URL地址):
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/

  (2)、例:清除类似 http://blog.s135.com/tech 的URL地址:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$

  (3)、例:清除所有缓存:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$


  4、一个清除Squid缓存的PHP函数(清除Varnish缓存同样可以使用该函数,无需作任何修改,十分方便):
view plainprint?
  1. <?php
  2. functionpurge($ip,$url)
  3. {
  4. $errstr='';
  5. $errno='';
  6. $fp=fsockopen($ip,80,$errno,$errstr,2);
  7. if(!$fp)
  8. {
  9. returnfalse;
  10. }
  11. else
  12. {
  13. $out="PURGE$urlHTTP/1.1\r\n";
  14. $out.="Host:blog.s135.com\r\n";
  15. $out.="Connection:close\r\n\r\n";
  16. fputs($fp,$out);
  17. $out=fgets($fp,4096);
  18. fclose($fp);
  19. returntrue;
  20. }
  21. }
  22. purge("192.168.0.4","/index.php");
  23. ?>


  附1:Varnish官方网站: http://www.varnish-cache.org/

  附2:2007年12月10日,我写了一个每天0点运行,按天切割Varnish日志,生成一个压缩文件,同时删除上个月旧日志的脚本(/var/logs/cutlog.sh):
  /var/logs/cutlog.sh文件内容如下:
引用
#!/bin/sh
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /var/logs/youvideo.log /var/logs/${date}.log
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &
mkdir -p /var/logs/youvideo/
gzip -c /var/logs/${date}.log > /var/logs/youvideo/${date}.log.gz
rm -f /var/logs/${date}.log
rm -f /var/logs/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz

  设置在每天00:00定时执行:
  
/usr/bin/crontab -e
  或者  
vi /var/spool/cron/root
  输入以下内容:
引用
0 0 * * * /bin/sh /var/logs/cutlog.sh


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

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

相关文章

ASP网站打开慢的解决办法

我们学校的门户网站由于是采用了 ASPACCESS数据库制作的。网站运行时间长了&#xff0c;打开就会很慢很慢。有时候基本打不开&#xff0c;多方寻找原因&#xff0c;始终没有突破。无意中发现了下面的办法可以解决问题&#xff0c;先贴出来与大伙交流。&#xff08;1&#xff09…

Redhat AS 5 搭建JSP网站环境实战

最近打算换换口味&#xff0c;将原有的 asp/asp.net网站换成jsp。主要原因是感觉作为web服务器&#xff0c;windows 2003 总是会安装一堆没有用的东西进去&#xff0c;例如“桌面”“IE”以及一些桌面办公电脑常用的软件等等。而且最头痛的就是windows2003每天拼命的不断更新、…

学习相关网站

2019独角兽企业重金招聘Python工程师标准>>> Flex4&#xff1a;http://www.riabook.cn/catalog.asp?tagsFlex4 天地会&#xff1a;http://www.9ria.com/ Flex资源整合平台&#xff1a;http://www.ria9.com/ Flex Skins&#xff1a;http://www.scalenine.com/ Adobe…

商城网站设计(一)

注册的基本代码实现 一、用户注册 基本点注册代码实现&#xff1a; 分析&#xff1a;表单提交数据 --> web层收集数据 --> 封装数据 --> 传递数据 --> 三层架构代码 GitHub代码下载链接&#xff1a;https://github.com/Vmetrio/Register1、表单提交数据2、web层 pa…

工作系列之可爱屋早教中心网站重构

2010年下半年&#xff0c;经过朋友的推荐&#xff0c;有幸参与到可爱屋早教中心网站重构项目中。可爱屋早教中心在2010年业务经过一次大的升级&#xff0c;急需扩展招生渠道&#xff0c;因此网络招生自然而然提上了日程。他们的官网由以前的工程师建设好以后&#xff0c;托管在…

网站开发的基础知识笔记--wsdchong

时间&#xff1a;2020/4/21 前言&#xff1a;对HTTP的了解、对cookie和session的了解、response和request对象的了解 一、对HTTP的了解 1概述&#xff1a;HTTP&#xff08;超文本传输协议Hypertext transfer protocol&#xff09;。超文本&#xff1a;不仅传输文字&#xff…

用Java开发出网站,在其中输入中文,但是保存到MySQL数据库中却是????

前言&#xff1a; 前两部分是从mysql和eclipse的角度去解决&#xff0c;在解决的过程中学到了之前没设计到的查看和修改数据库或数据表的字符集的知识。 后一部分是掌握了前两步后&#xff0c;进行的新一轮解决问题的探索。其中遇到的细枝末节的bug&#xff0c;也一一解决&am…

网站检测之防注入绕过的十一种技巧

2019独角兽企业重金招聘Python工程师标准>>> 1、运用编码技术绕过 如URLEncode编码&#xff0c;ASCII编码绕过。 例如or 11即 %6f%72%20%31%3d%31 而Test也可以为 CHAR(101)CHAR(97)CHAR(115)CHAR(116) 2、通过空格绕过 如两个空格代替一个空格&#xff0c;用Tab代替…

行业分析常用到的21个网站

行业分析常用到的21个网站 前言 今天写《就业乱世&#xff0c;如何正面应战&#xff01;【所长】》笔记的时候在里面找到了作者分析行业常用到的21个网站。于是我也看一看。还是有不少启发的。让我一目了然知道对哪些公司看哪些数据。我之前接触得迷迷糊糊的&#xff0c;知道…

静态博客网站——vuepress功能进化

vuepress进化史 前言 昨天回顾笔记的时候。想起了我一个月前的尝试的vuepress&#xff0c;之前因为部署没成功&#xff0c;没找到原因就闲置了一下。昨天心血来潮&#xff0c;研究了一下。没想到一下子就解决了。 真的是黎明前最黑暗&#xff0c;离成功就差一步。但是也正如人…

一个把html控件封装的很好的网站bootstrap

最近一直忙于写前台代码突然发现twitter提供了一个开源的工具里面提供了一些非常好的css文件和jquery文件&#xff0c;嘿嘿&#xff0c;现在拿出来分享一下&#xff0c;下面来讲具体应用在MVC的操作 1、先把bootstrap的包下载下来 地址是http://twitter.github.com/bootstrap/&…

商业分析的50个网站和分析方法

商业分析的50个网站和分析方法 前言 今天看到一个内容&#xff0c;感觉还可以&#xff0c;干货多。 摘要 一个questmobile&#xff0c;一个买购网。用来看互联网的研报以及看行业龙头企业。 摘要 下次了解企业的时候&#xff0c;先用爱企查查公司的财务情况&#xff1b;然后用…

查论文的网站

查论文的网站 前言 今天看知乎的时候看到一个内容&#xff0c;感觉不错&#xff0c;对我有用。记录一下。 《你写论文时发现了哪些非常神的网站&#xff1f;》 用网页打开知乎的时候如果弹出登录弹窗&#xff0c;且不能叉掉&#xff0c;可以先刷新一下&#xff0c;然后不断按…

解决访问github等网站慢或下载失败的问题

最近老大push项目&#xff0c;正常的git clone每次都是下载一部分就断掉了。下面介绍网上找到的两种方法&#xff1a; 方法一&#xff1a; 1.打开网站https://www.ipaddress.com/ &#xff1b; 2.分别在上面打开的网站中查找github.com和github.global.ssl.fastly.net的IP地址&…

ASP.NET 中得到网站绝对路径的几种方法

转载于:https://www.cnblogs.com/weapon/archive/2013/01/19/2867235.html

自定义SharePoint新网站创建过程 (二)

首先澄清一个概念。在一个SharePoint网站的网站设置页面中&#xff0c;使用“将网站另存为模板”链接&#xff0c;管理员可以将整个网站保存为一个扩展名为.stp格式的模板。使用这个stp网站模板&#xff0c;管理员可以重复创建同样结构&#xff08;和内容&#xff09;的新网站。…

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

开篇语&#xff1a;最近在弄ocx控件发布到asp.net网站上使用&#xff0c;就是用户在使用过程中&#xff0c;自动下载安装ocx控件。&#xff08;此文章也是总结了网上好多人写的文章&#xff0c;我只是汇总一下&#xff0c;加上部分自己的东西&#xff0c;在这里感谢所有在网上发…

[方法篇](禁止YisouSpider|EasouSpider|EtaoSpider)搜索引擎蜘蛛给网站带来的危害,有效指引爬虫对应的措施...

搜索引擎蜘蛛给网站带来的危害&#xff0c;有效指引爬虫对应的措施[方法篇](禁止YisouSpider|EasouSpider|EtaoSpider)上一遍文章《搜索引擎蜘蛛给网站带来的危害&#xff0c;有效指引爬虫对应的措施(最准确搜索引擎蜘蛛名称)》下一篇“如何更高效发现&屏蔽搜索引擎蜘蛛”实…

以电商网站为例,谈大型分布式架构设计与优化

本文大纲&#xff1a; 1. 使用电商案例的原因 2. 电商网站需求 3. 网站初级架构 4. 系统容量估算 5. 网站架构分析 6. 网站架构优化 本文主题为电商网站架构案例&#xff0c;将介绍如何从电商网站的需求&#xff0c;到单机架构&#xff0c;逐步演变为常用的、可供参考的分布式架…

table改网站框的大小

table 当网站出现这样上下不一样宽的时候 修改的时候要修改最外部的table 修改完后效果转载于:https://blog.51cto.com/hmlwl/1398906