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

varnish安装和配置过程

配置环境:Centos6.3x86编译安装varnish:yuminstall-yautomakeautoconflibtoolncurses-devellibxsltgroffpcre-develpkgconfigyuminstall-yautomakeautoconflibtoolncurses-devellibx
配置环境  : Centos 6.3 x86

编译安装varnish:
yum install -y automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
wget http://repo.varnish-cache.org/source/varnish-3.0.4.tar.gz tar 
zxvf varnish-3.0.4.tar.gz
cd varnish-3.0.4
./configure --prefix=/usr/local/varnish
make && make install

配置缓存存放+日志地址 
mkdir -p /data/varnish/
chmod +w /data/varnish/
chown -R www:www /data/varnish/  ### 以网站权限运行

编辑配置文件:
[root@server110 ~]# vim /usr/local/varnish/default.vcl
backend web1 {
       .host = "192.168.101.112";
       .port = "80";
       .connect_timeout = 1s;      #连接超时时间
       .first_byte_timeout = 8s;
       .between_bytes_timeout = 5s;
}
#backend web2 {
#       .host = "xx.xx.xx.xx";
#       .port = "80";
#}
acl purge {
       "localhost";
       "127.0.0.1";
       "192.168.101.0"/24;
}
sub vcl_recv {
    if (req.request == "PURGE") {
        if (!client.ip ~ purge)
        {
            error 405 "Not allowed.";
        }
        return(lookup);
    }
    if (req.http.host ~ "^www.server110.com") {               #web1对应的域名
        set req.backend = web1;
    }
    #elseif (req.http.host ~ "^(www)|(my).baidu.com") {        #web2对应的域名
    #   set req.backend = web2;
    #}
    else {
        error 404 "Caesar's cache-server ! Email:root@server110.com"; #如果域名不在以上范围的出错提示
        #set req.backend = web1;
    }
    if (req.request != "GET" && req.request != "HEAD") {
        return(pipe);
    }
    elseif (req.url ~ "\.(php|cgi)($|\?)")                #动态页面直接通过,不缓存
    {
        return(pass);
    }
    return(lookup);
}
sub vcl_hit {
    if (req.request == "PURGE") {
        set obj.ttl = 0s;
        error 200 "Purged.";
    }
}
sub vcl_miss
{
    return (fetch);
}
##让varnish服务器缓存的类型,从后端取得数据后调用
sub vcl_fetch
{
    ##对访问中get有包含jpg,png等格式的文件进行缓存,缓存时间为7天,s为秒
    if (req.request == "GET" && req.url ~ "\.(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$")
    { 
        set beresp.ttl = 7d; 
    }
    ##对访问get中包含htm等静态页面,缓存300秒
    if (req.request == "GET" && req.url ~ "\/[0-9]\.htm$")
    { 
        set beresp.ttl = 300s; 
    }
    return (deliver);
}
####添加在页面head头信息中查看缓存命中情况########
sub vcl_deliver
{
    set resp.http.x-hits = obj.hits ;
    if (obj.hits > 0)
    { 
        set resp.http.X-Cache = "HIT cqtel-bbs"; 
    }
    else 
    { 
        set resp.http.X-Cache = "MISS cqtel-bbs"; 
    }
}

参数:
-u 以什么用运行
-g 以什么组运行
-f varnish配置文件
-a 绑定IP和端口
-s varnish缓存文件位置与大小
-w 最小,最大线程和超时时间
-t 缓存时间s
-T varnish管理端口,主要用来清除缓存
-p client_http11=on 支持http1.1协议
-P(大P) /usr/local/varnish/var/varnish.pid 指定其进程码文件的位置,实现管理
停止varnish
pkill varnishd   ###结束varnishd进程

启动 varnish 
/usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/default.vcl -a 192.168.101.111:80 -s file,/data/varnish/cache/varnish_cache.data,1G -w 1024,51200,10 -t 3600 -T 192.168.101.111:3000

 追加 varnish 启动项到开机启动 
echo "/usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/default.vcl -a 192.168.101.111:80 -s file,/data/varnish/cache/varnish_cache.data,1G -w 1024,51200,10 -t 3600 -T 192.168.101.111:3000" >> /etc/rc.local

 启动日志,方便分析网站访问情况
/usr/local/varnish/bin/varnishncsa -w /data/varnish/logs/varnish.log & echo "/usr/local/varnish/bin/varnishncsa -w /data/varnish/logs/varnish.log &" >> /etc/rc.local
参数: -w 指定varnish访问日志要写入的目录与文件

varnish日志切割

[root@server110 ~]# vim /data/shell/cut_varnish_log.sh
#!/bin/sh
logs_path=/data/varnish/logs
vlog=${logs_path}/varnish.log
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mkdir -p ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv /data/varnish/logs/varnish.log ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/varnish-${date}.log
/usr/local/varnish/bin/varnishncsa -w /data/varnish/logs/varnish.log &
使用计划任务,每天晚上凌晨00点运行日志切割脚本
echo "0 0 * * * /data/shell/cut_varnish_log.sh" >> /etc/crontab

 其他设置 {清除缓存,命中率等 }
/usr/local/varnish/bin/varnishadm -T 192.168.101.111:3000 purge "req.http.host ~ www.server110.com$ && req.url ~ /static/image/tp.php"
详细介绍:
192.168.101.111:3000 ###为被清除缓存服务器地址
www.server110.com  ###为被清除的域名
/static/image/tp.php ###为被清除的url地址列表
清除所有缓存
/usr/local/varnish/bin/varnishadm -T 192.168.9.201:3000 url.purge *$
清除image目录下所有缓存
/usr/local/varnish/bin/varnishadm -T 192.168.9.201:3000 url.purge /image/
查看Varnish服务器连接数与命中率
/usr/local/varnish/bin/varnishstat ?n /data/varnish/cache/varnish_cache.data

推荐阅读
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
author-avatar
小丹巛丹布莱妮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有