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

news/2024/5/18 17:00:22/文章来源:https://blog.csdn.net/weixin_33895657/article/details/85031561

今天写的这篇关于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:
 

wget http://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 plaincopy to clipboardprint?
  1. <?php   
  2. function purge($ip$url)   
  3. {   
  4.     $errstr = '';   
  5.     $errno = '';   
  6.     $fp = fsockopen ($ip, 80, $errno$errstr, 2);   
  7.     if (!$fp)   
  8.     {   
  9.          return false;   
  10.     }   
  11.     else  
  12.     {   
  13.         $out = "PURGE $url HTTP/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.         return true;   
  20.     }   
  21. }   
  22.   
  23. purge("192.168.0.4""/index.php");   
  24. ?>  

<?php function purge($ip, $url) {    $errstr = '';    $errno = '';    $fp = fsockopen ($ip, 80, $errno, $errstr, 2);    if (!$fp)    {         return false;    }    else    {        $out = "PURGE $url HTTP/1.1\r\n";        $out .= "Host:blog.s135.com\r\n";        $out .= "Connection: close\r\n\r\n";        fputs ($fp, $out);        $out = fgets($fp , 4096);        fclose ($fp);        return true;    } } purge("192.168.0.4", "/index.php"); ?>

  附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://blog.s135.com/post/313

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

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

相关文章

集成轻量级的IIS实现打包Asp.Net网站生成exe方便快捷的进行客户演示

本文和大家分享一下打包Asp.Net 网站成为一个exe 方便快捷的进行客户演示&#xff0c;挺不错哦。 在Asp时代有一个NetBox 产品可以把整个Asp网站AllInOne的打包成一个exe&#xff0c;在没有IIS的情况下可以单独运行这个exe来开启整个网站。在Asp.Net 下一直没有类似的产品出现&…

23个精美的的国外网站设计作品推荐欣赏

如果一个网站的内容不是很多而且将来内容也不怎么增加的话&#xff0c;那么制作成单页&#xff08;Single Page Websites&#xff09;的形式是很好的选择。这种只有一个页面的网站形式&#xff0c;曾经非常流行&#xff0c;现在依然有很多人喜欢。如果你也想做一个这样的网站&a…

w10系统下怎么删除服务器,win10系统任务栏图标怎么删除_网站服务器运行维护

win10系统任务栏没有搜索框怎么办_网站服务器运行维护win10系统任务栏没有搜索框的解决方法&#xff1a;1、首先使用鼠标右键点击任务栏&#xff1b;2、然后在弹出的菜单中依次点击【Cortana】、【显示搜索框】选项即可。1、点击“开始”菜单&#xff0c;运行“regedit”打开注…

一个引号导致1个小时网站打不开

咱们就说下这个例子&#xff0c;提醒广大开发在写SQL的时候一定要仔细&#xff01;当时情况是这样的&#xff0c;一个慢SQL把数据库CPU连接数跑满&#xff0c;由于并发压力大&#xff0c;CPU空闲瞬时为0&#xff0c;过一会机器被HANG死&#xff0c;连接不上。因涉及公司隐私问题…

【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法)

文字识别是AI的一个重要应用场景&#xff0c;文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 其中&#xff0c;文本检测、文本识别是最核心的环节。文本检测方面&#xff0c;在前面的文章中已介绍过了多种基于深度学习的方法&#xff0c;可针…

360在网站安全防护中的实践

2019独角兽企业重金招聘Python工程师标准>>> 360在网站安全防护中的实践 作为国内首个集网站漏洞检测、网站挂马监控、网站篡改监控于一体的免费检测平台&#xff0c;360网站安全检测平台拥有全面的网站漏洞库及蜜罐集群检测系统&#xff0c;能够第一时间协助网站检…

为网站赢得用户信任的8个建议

对我们来说&#xff0c;无论是浏览网页还是网上购物&#xff0c;互联网都是一个令人担忧的地方。人们对网上的一切都保持着怀疑的态度。信用卡诈骗和身份假冒的出现&#xff0c;导致网站很难获得用户的信任。要获得用户的信任也不是不可能。通过优化网站上的一些可视化元素&…

01-19asp.net基础--网站登录及验证

第一步&#xff1a; 1&#xff09;首先使用“CodeSmith”将Examinee类实体化&#xff0c;并生成实体类连接数据库的方法&#xff0c;存在解决方案下的“App_Code”文件夹下。 修改一下连接某个数据库&#xff1b; private SqlConnection _Conn;public DBConnection(){String co…

在线问答系统html模板,问答系统网站模板

充值模块会员积分:支持设置会员积分及积分累计升级&#xff0c;并获得购买折扣&#xff1b;会员充值:支持会员充值到账号&#xff0c;用于购买商品&#xff0c;下载点数等开通&#xff1b;微信公共号:添加多个公共号&#xff0c;方便管理及推送信息&#xff1b;自定义菜单:能够…

教你如何下载音乐的网站只试镜

打开IE浏览器&#xff0c;选择“Internet选项”&#xff0c;“浏览历史记录”的“设定” 先把打开的目录清空&#xff0c;然后再打开仅仅供试听的站点。比方“http://www.bandari.net/”&#xff0c;待播放结束以后&#xff0c;就能够看到这个音乐文件已经下载下来了 版权声明&…

python爬虫遇到动态加密怎么办?爬取某点评网站内容

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于早起Python &#xff0c;作者刘早起 Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 在前几天针某…

不为技术而技术:大型网站架构演化解析

短短几十年国内互联网发生了翻天覆地的变化&#xff0c;特别是国家支持互联网发展&#xff0c;提出了“互联网”行动计划&#xff0c;国内各行各业的互联网更是日新月异。作为一个九零后小白没有亲身经历互联网的演变历程&#xff0c;如今看的像淘宝、京东、腾讯这样的大型网站…

网站就必须用响应式布局吗?MVC视图展现模式之移动布局

本文先引入给读者一个自己研究的机会&#xff0c;下次深入说明一下&#xff1a; 废话不多说&#xff0c;直接上图 新建一个mvc的项目 在视图里面添加一个移动端视图 正常访问一下 Bootstrap自带的响应式的方式&#xff08;页面代码并没有改变&#xff09; 我们来模拟一下移动端…

大型网站技术架构 核心原理与案例分析 2016-4-17

2019独角兽企业重金招聘Python工程师标准>>> 第1篇 概述 1 大型网站架构演化 2 1.1 大型网站软件系统的特点 3 1.2 大型网站架构演化发展历程 4 1.2.1 初始阶段的网站架构 4 1.2.2 应用服务和数据服务分离 4 1.2.3 使用缓存改善网站性能 5 1.2.4 使用应用服务器集群…

用python和karrigell做网站

从今天起,和大家一起学习用python/karrigell做网站.对于能搜到这篇文章的兄弟,一定是对karrigell是什么有大致的了解了,但是如果不知道也没关系.这个单词虽然很复杂,而且金山词霸不知道该怎么解释,但实际上的意思却很简单.karrigell,一个支持用python开发web程序的框架,说的再明…

基于Vue,Vue-router,Vuex的简书网站模仿(二)

接着上一篇我们接着讲,关于这个网站的专题页面和2015精选页面&#xff0c;如果有小伙伴没看过上一篇文章&#xff0c;这里附上上一篇文章的的链接基于Vue,Vue-router,Vuex的简书网站模仿这里是网站的源码下载地址 Github Repo 这里是Demo地址&#xff0c;在线感受vue的魅力 页面…

Google Analytics SEO 实时 网站 访问量 统计

/**************************************************************************** Google Analytics SEO 实时 网站 访问量 统计* 说明&#xff1a;* 之前一直在想要怎么才能让aplexos.com域名网站能够统计访问量&#xff0c;网站是使用* github.io搭建&…

某政府机关网站的友情链接

今天上江苏建设人才网查些信息&#xff0c;网址&#xff1a;http://www.jschr.gov.cn/jschr/Default.aspx?不经意间在其首页底部“相关链接”栏目有个名为“dnf外挂”的链接&#xff0c;甚感兴趣&#xff0c;遂点击&#xff0c;指向网址 http://bbs.kid-game.net/ &#xff0…

用户请求队列化_高性能网站实用技巧之消息队列篇

什么是消息队列消息队列&#xff08;Message Queue&#xff09;是一种进程间通信或同一进程的不同线程间的通信方式。进程或者线程之间通过 消息 进行通信&#xff0c;消息发送后可以立即返回&#xff0c;由消息系统来确保信息的可靠传递&#xff0c;消息发布者&#xff08;生产…