热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Varnish2.04安装配置过程详解

1.1varnish简介Varnish是一款高性能的开源HTTP加速器,为web服务器提供缓存以及反向代理的功能。1.1.1varnish的原理1.2varnish安装与配置1.2.1服务器环境介绍服务器IP:192.168.1.103varnidh:192.168.1.103:80apache:192.168.1.1

1.1 varnish简介
Varnish是一款高性能的开源HTTP加速器,为web服务器提供缓存以及反向代理的功能。
1.1.1 varnish的原理

varnish2.04配置 - koumm - koumm的博客

1.2 varnish安装与配置
1.2.1 服务器环境介绍
服务器IP:192.168.1.103
varnidh :192.168.1.103:80
apache  :192.168.1.103:81 基于域名的虚拟主机 www.koumm.com  web.koumm.com
说明:整个网络的架购就是客户端的域名都要指向varnish服务器,由varnish把请求发送给apache。本地测试的时候可以修改hosts文件来模拟实现域名解析测试。

1.2.2 安装varnish2.04
# tar zxvf varnish-2.0.4.tar.gz
# cd varnish-2.0.4
# ./configure --prefix=/usr/local/varnish
# make && make install

1.2.3创建配置文件
varnish有默认的配置文件,通常自己创建一个,配置文件要根据自己的实际需求来设置。varnish1.x与varnish2.x的配置文件的语法不一样。varnish2.x就是如下的定义后端主机的格式,用.host来表示。

vi /usr/local/varnish/vcl.conf
backend www {
        .host = "192.168.1.103";
        .port = "81";
}

/* backend web {
#        .host = "xx.xx.xx.xx";
#        .port = "80";
} */

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

sub vcl_recv {
       if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                       error 405 "Not allowed.";
               }
               lookup;
       }
/*如果apache开启压缩功能的话,必须要加入以下内容,否则varnish测试不成功。*/
    
       if (req.http.Accept-Encoding) {
               if (req.http.Accept-Encoding ~ "gzip") {
                       set req.http.Accept-Encoding = "gzip";
            }
       elseif (req.http.Accept-Encoding ~ "deflate" ) {
               set req.http.Accept-Encoding = "deflate";
            }
       else {
               remove req.http.Accept-Encoding;
            }
       }  

# Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
# Varnish对域名为*.koumm.com的请求进行处理,可以实现泛域名解析

       if (req.http.host ~ ".koumm.com") {
               set req.backend = www;
               if (req.request != "GET" && req.request != "HEAD") {
                            pipe;
                      }
                      else {
                            lookup;
                      }
       }
/*       elseif (req.http.host ~ ".xxxx.com") {
#               set req.backend = web;
#               if (req.request != "GET" && req.request != "HEAD") {
#                           pipe;
#                     }
#                     else {
#                           lookup;
#                     }
#      } */
       else {
                      error 404 "Cache Server";
                      lookup;
       }
}

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

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

sub vcl_fetch {
        set obj.ttl = 30d;
        remove obj.http.Set-COOKIE;
}

#可以在网页头中看到命中不命中的内容
sub vcl_deliver {
      set resp.http.x-hits = obj.hits ;
      if (obj.hits > 0) {
            set resp.http.X-Cache = "HIT";
      } else {
            set resp.http.X-Cache = "MISS";
      }
}

1.2.4 启动varnish
启动varnish程序并实现开机自启动,把以下命令写入rc.local文件中。
(1)启动程序或代码
指定配置文件启动(简单的如下)
/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -T 127.0.0.1:3500 -p client_http11=on
说明:
-f 指定配置文件启动
-a 监听本机的网卡的80端口
-T 指定本机的varnish管理端口
-s file 指定varnish缓存文件的位置以及大小
-w 指处理的最小请求数、最大请求数、超时时间
-g 组名
-u 用户名
-p client_http11=on 支持http1.1协议
-P(大P) /usr/local/varnish/var/varnish.pid 指定其进程码文件的位置,实现管理。
================
启动varnish示例:
================
/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

(2)日志启动程序
找到_.vsl文件
/usr/local/varnish/bin/varnishncsa -n /usr/local/varnish/var/varnish/www.koumm.com -w /usr/local/varnish/var/varnish/varnish.log &

(3)内核参数修改
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

1.2.5 测试varnish效果
可以通过IE浏览器一次访问并查看varnish状态,来最终测试varnish是否成功。
(1)查看访问量与命中命令
/usr/local/varnish/bin/varnishstat
注意下面两个地方
2         0.00         0.03 Client requests received //客户请求数量
1         0.00         0.03 Cache hits     //缓存页面命中数
1         0.00         0.00 Cache misses   //直接访问后面的数量

(2)通过查看网页头查看命中情况
[root@centos ~]# curl -I http://www.koumm.com
HTTP/1.1 200 OK
Server: nginx/0.7.61
Date: Fri, 13 Nov 2009 02:04:43 GMT
Content-Type: text/html
Connection: keep-alive
Last-Modified: Wed, 18 Nov 2009 06:29:08 GMT
ETag: "213f85-131-4789f5c267500"
Vary: Accept-Encoding
Content-Length: 305
X-Varnish: 1435095927
Age: 0
Via: 1.1 varnish
x-hits: 0
X-Cache: MISS     /*没有命中*/

[root@centos ~]# curl -I http://www.koumm.com
HTTP/1.1 200 OK
Server: nginx/0.7.61
Date: Fri, 13 Nov 2009 02:04:44 GMT
Content-Type: text/html
Connection: keep-alive
Last-Modified: Wed, 18 Nov 2009 06:29:08 GMT
ETag: "213f85-131-4789f5c267500"
Vary: Accept-Encoding
Content-Length: 305
X-Varnish: 1435095928 1435095927
Age: 1
Via: 1.1 varnish
x-hits: 1
X-Cache: HIT     /*命中*/


4 通过Varnish管理端口进行管理
注意:前提是在启动varnish的时候加入对了对管理端口的支持。
# /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help
help [command]
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
quit
purge.url
purge.hash
purge [&& ]...
purge.list
示例:
[root@www varnish]# /usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 status
Child in state running

以上是打印的帮助文件,可以看到有对varnish程序的启动与管理。主要是要找到各自网址的特征。
(1)例:清除类似http://www.koumm.com/a/quans...的URL地址):
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/
(2)例:清除类似http://www.koumm.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 *$

5.日志的轮询rotate
touch /etc/logrotate.d/varnish
/etc/logrotate.d/varnish内容
/usr/local/varnish/logs/varnish.log
{
    daily
    rotate 60
    copytruncate
    notifempty
    missingok

    prerotate
        killall varnishncsa
    endscript

    postrotate
        /usr/local/varnish/bin/varnishncsa -a -w /usr/local/varnish/logs/varnish.log &
    endscript
}

=====
注意:
=====
1. 在安装与测试时出现的问题:
varnish在测试的时候,第二个客户端/IE测试时不能命中的问题,结果发现是apache的配置文件中加入了压缩的配置选项,并且加入了网页头中,造成的。
=====================

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
#Header append Vary User-Agent env=!dont-vary

=====================
2. 解决办法
(1)因为需要在apache压缩网页头,只是去掉了#Header append Vary User-Agent env=!dont-vary。这一行的内容。
(2)在varnish配置文件中加入了以下支持压缩功能的代码后,varnish最终测试成功。

if (req.http.Accept-Encoding) {
     if (req.http.Accept-Encoding ~ "gzip") {
                set req.http.Accept-Encoding = "gzip";
     }
elseif (req.http.Accept-Encoding ~ "deflate" ) {
     set req.http.Accept-Encoding = "deflate";
     }
else {
     remove req.http.Accept-Encoding;
     }
}  

3. 我自我感觉这个varnish的配置比squid还是要简单一些。


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 本文介绍在使用vmware中配置centos6.5时遇到的网络问题,包括host-only和natip的配置,以及无法上网的原因。同时提供了解决方法,包括去掉host-only配置文件中的gateway。 ... [详细]
author-avatar
cool瀚_325
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有