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

Varnish3.0安装配置详解

Varnish相对于squid,存在大量优势,经过生产环境实践,可以用其替换squid.1.安装rpm--nosignature-ihttp://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpmyu

Varnish相对于squid,存在大量优势,经过生产环境实践,可以用其替换squid.

1. 安装

rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm

yum install varnish

       如果安装过程中提供缺少lbiedit软件包,则使用以下命令安装libedit:

rpm -Uvh http://dev.centos.org/centos/5/testing/x86_64/RPMS/libedit-3.0-2.20090905cvs.el5.centos.x86_64.rpm

rpm -Uvh http://dev.centos.org/centos/5/testing/x86_64/RPMS/libedit-devel-3.0-2.20090905cvs.el5.centos.x86_64.rpm

下载范例配置
       cd /etc/varnish/

mv default.vcl default.vcl.bak

wget -O default.vcl http://yum.120ask.com/deploy/varnish-3.0/default.vcl

cd /etc/sysconfig

mv varnish varnish.bak

wget http://yum.120ask.com/deploy/varnish-3.0/varnish

2. 设置启动选项
       chkconfig varnish on

chkconfig varnishlog off

chkconfig varnishncsa off

3. 启动服务
       service varnish restart

4. 测试
       使用合适的测试工具,如curl, wget,甚至浏览器等测试服务是否正常。强烈建议重启机器以检查配置是否正常。

使用以上方法,即可快速安装好varnish 3.0, 安装完毕之后,一些重要的目录及文件需要特别熟悉:

文件

说明

/etc/varnish/default.vcl

服务配置文件,此文件至关重要。可下载现成的范例文件:http://yum.120ask.com/deploy/varnish-3.0/default.vcl

/etc/varnish/secret

varnishadm管理程序使用到的加密验证文件,此文件在启动varnish时会自动生成,无须建立

/etc/sysconfig/varnish

Varnishd守护进程启动参数配置文件(实质是一个shell脚本),请注意NFILES,MEMLOCK两个变量的值,可从以下地址下载范例文件:

http://yum.120ask.com/deploy/varnish-3.0/varnish

/usr/sbin/varnishd

Varnish的守护进程主程序,一般情况不需要直接运行之

/usr/bin/varnishadm

varnish的命令行管理工具

/usr/bin/varnishhist

以文本图形方式显示varnish的缓存命中分布状况

/usr/bin/varnishlog

显示varnish的shared memory logs, 在调试时候,可能会很有用

/usr/bin/varnishncsa

以NCSA格式记录varnish访问日志到文件系统

/usr/bin/varnish_reload_vcl

用于在运行时重新加载vcl配置,必须将/etc/sysconfig/varnish文件中的RELOAD_VCL设置为1

/usr/bin/varnishreplay

重现访问日志

/usr/bin/varnishsizes

与/usr/bin/varnishhist作用类似

/usr/bin/varnishstat

统计运行状态,如命中率、连接数、缓存条目等等。这个工具最为常用

/usr/bin/varnishtest

/usr/bin/varnishtop

显示varnish频率最高的活动状态

在这些文件中,/etc/varnish/default.vcl是最被频繁修改的文件,而/usr/bin/varnishstat则是在统计时使用最为频繁的工具。

Varnish的各项参数及配置,较为复杂,根据具体应用不同,一般来说,只需要修改/etc/varnish/default.vcl即可。

关于Varnish Cache

Varnish Cache是一个web加速软件,用作web服务加速的反向代理,与Squid不同的是它建立在较新的系统内核调用上,并且主要是使用内存作为缓存,它现有的使用者有facebook等,据使用者反馈,其与Squid相比,相同的访问量下连接数大大减少。

本人测试过程

准备一个普通的HTTP web服务器,我在虚拟机内启动了一个Linux+Apache+MySQL+Php环境,配置文件未改动,下载一个PHPWind 的bbs程序拿来测试。

在另外一个服务器上编译安装Varnish 3.0(IP:192.168.159.5),默认安装路径,安装过程可参考官方文档。

编辑Varnish的默认配置文件(/usr/local/etc/varnish/default.vcl):
#首先设置一个后端服务器
backend default {
.host = "192.168.159.11";
.port = "80";
}
sub vcl_recv {
if (req.restarts == 0) {
"code-keyword">if (req.http.x-forwarded- "code-keyword">for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
"code-keyword">set req.http.X-Forwarded-For = client.ip;
}
}
#把除了以下这些类型请求以外的访问请求全部直接管道发送到后端的服务器
"code-keyword">if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
#只有GET与HEAD方法才会使用Lookup,使用缓存。
"code-keyword">if (req.request != "GET" && req.request != "HEAD") {
/* We only deal  "code-keyword">with GET and HEAD by default */
return (pass);
}
#  "code-keyword">if (req.http.Authorization || req.http.COOKIE) {
#     /* Not cacheable by default */
#     return (pass);
# }
#如果请求的是php页面直接转发到后端服务器
"code-keyword">if (req.url ~ "\.(php|cgi)($|\?)") {
      return (pass);
}
return (lookup);
}
sub vcl_pipe {
return (pipe);
}
sub vcl_pass {
return (pass);
}
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (hash);
}
sub vcl_hit {
return (deliver);
}
sub vcl_miss {
return (fetch);
}
sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-COOKIE ||
beresp.http.Vary == "*") {
/*
* Mark as "Hit-For-Pass"  "code-keyword">for the next 2 minutes
*/
set beresp.ttl = 120 s;
return (hit_for_pass);
}
"code-keyword">if (req.url ~ "\.(png|gif|jpg)$") {
unset beresp.http.set-COOKIE;
set beresp.ttl = 1h;
}
#设置图片的缓存TTL为一小时
return (deliver);
}
sub vcl_deliver {
return (deliver);
}
sub vcl_error {
"code-keyword">set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.Retry-After = "5";
synthetic {"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">





Error "} + obj.status + " " + obj.response + {"

"} + obj.response + {"


Guru Meditation:


XID: "} + req.xid + {"




Varnish cache server




"};
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}
#

添加Varnishd进程用户www,用户组www,创建/var/vcache目录,使www用户有权限可读写。
groupadd www
useradd www -g www
mkdir /var/vcache
chown -R www:www /var/vcache
chmod -R 750 /var/vcache

编辑/etc/sysctl.conf 优化几个内核参数:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

     运行sysctl -p 重新按配置文件设置内核参数。

启动Varnishd
varnishd -a 0.0.0.0:80 -f /usr/local/etc/varnish/ "code-keyword">default.vcl -T 127.0.0.1:2000 -s file,/var/vcache/,1G -u www

参数说明:-f指定了配置文件,-T是指定命令行管理界面监听地址,-s file指定了使用文件做缓存,1G是缓存文件大小,-u就是进程的用户了。

在客户端访问http://192.168.159.5/phpwind ,高频率刷新页面观察varnishd一端netstat -n输出,可以发现Varnish端到后端(apache)的TCP连接几乎一闪而过,很快就释放掉。

解决后端服务器不能日志记录真实访问者IP的问题,修改apache日志格式。
LogFormat  "code-quote">"%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""  varnish_combined

之后修改Apache的虚拟主机日志格式或者默认日志格式为 varnish_combined.


推荐阅读
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
author-avatar
华浦即热式电热水龙头_376
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有