Varnish配置笔记记录

Varnish是一个开源的反向代理软件和HTTP加速器,与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点,很多大型的运营网站都开始尝试用Varnish来替换Squid,这些都促使Varnish迅速发展起来。

1、准备工作及下载源码包

yum install -y automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

wget http://repo.varnish-cache.org/source/varnish-3.0.3.tar.gz

2、安装

tar zxf varnish-3.0.3.tar.gz

cd varnish-3.0.3

./autogen.sh

./configure --prefix=/usr/local/varnish

make && make install

3、添加Varnishd进程用户www,用户组www,创建/var/vcache目录,使www用户有权限可读写

groupadd www

useradd www -g www

mkdir /home/vcache

chown -R www:www /home/vcache

chmod -R 750 /home/vcache

4、编辑/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

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

5、启动Varnishd

/usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/home/vcache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0.0.1:3500

参数说明:

-u 以什么用运行

-g 以什么组运行

-f varnish配置文件

-a 绑定IP和端口

-s varnish缓存文件位置与大小

-w 最小,最大线程和超时时间

-T varnish管理端口,主要用来清除缓存

-p client_http11=on 支持http1.1协议

-P(大P) /usr/local/varnish/var/varnish.pid 指定其进程码文件的位置,实现管理

6、启动varnishncsa用来将Varnish访问日志写入日志文件:

/usr/local/varnish/bin/varnishncsa -n /home/vcache -w /var/log/varnish.log &

7、Varnish 缓存清除

/usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 purge "req.http.host ~ www.5013.org$ && req.url ~ /static/image/tp.php"

说明:

192.168.1.180:3000 为被清除缓存服务器地址

www.5013.org 为被清除的域名

/static/image/tp.php 为被清除的url地址列表

清除所有缓存

/usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 url.purge *$

清除image目录下所有缓存

/usr/local/varnish/bin/varnishadm -T 192.168.1.180:3500 url.purge /image/

8、将加入启动项

vi /etc/rc.local

ulimit -SHn 51200

/usr/local/varnish/sbin/varnishd -u www -g www -f /usr/local/varnish/etc/varnish/varnish.conf -a 0.0.0.0:80 -s file,/home/vcache/varnish_cache.data,100M -w 1024,8192,10 -t 3600 -T 127.0.0.1:3500

/usr/local/varnish/bin/varnishncsa -n /home/vcache -w /var/log/varnish.log &

9、杀掉varnishd进程

pkill varnishd

10、查看varnishd命中率

/usr/local/varnish/bin/varnishstat

11、更新系统时间

yum install -y ntp

ntpdate time.nist.gov

echo "00 01 * * * ntpdate time.nist.gov" 》 /etc/crontab

附件多主机多域名varnish.conf 配置

backend blog {

.host = "198.56.193.190";

.port = "80";

}

backend www {

.host = "192.168.1.170";

.port = "80";

}

sub vcl_recv {

if (req.http.host ~ "^(www.)?5013.org$") {

set req.backend = blog;

} elsif (req.http.host ~ "^(www.)?(test1.com|test2.com)$") {

set req.backend = www;

} else {

error 404 "Unknown virtual host";

}

}

sub vcl_recv {

if (req.restarts == 0) {

if (req.http.x-forwarded-for) {

set req.http.X-Forwarded-For =

req.http.X-Forwarded-For + ", " + client.ip;

} else {

set req.http.X-Forwarded-For = client.ip;

}

}

#把除了以下这些类型请求以外的访问请求全部直接管道发送到后端的服务器

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,使用缓存。
if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
}
# if (req.http.Authorization || req.http.Cookie) {
# /* Not cacheable by default */
# return (pass);
# }
#如果请求的是php页面直接转发到后端服务器
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" for the next 2 minutes
*/
set beresp.ttl = 120 s;
return (hit_for_pass);
}
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 {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.Retry-After = "5";
synthetic {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} + obj.status + " " + obj.response + {"</title>
</head>
<body>
<h1>Error "} + obj.status + " " + obj.response + {"</h1>
<p>"} + obj.response + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}

(0)

相关推荐

  • 开源堡垒机GateOne的安装.配置笔记(详细步骤)

    GateOne简介 GateOne是一款基于HTML5的开源终端模拟器/SSH客户端,同时内置强大的插件功能。它自带的插件使其成为一款令人惊艳的SSH客户端,但是,它可以用于运行任何终端应用。用户可以 ...

  • 微信中怎么记录笔记

    当我们有什么事需要提醒自己的时候往往会选择做备忘录,现在就由小编来告诉大家在手机微信上做备忘录的方法.具体如下:1.第一步,在手机桌面上找到微信客服端并打开.2.第二步,在微信主页中找到右下角的[我] ...

  • 三星S8手机如何使用三星笔记编辑记录笔记

    日常生活工作中由于手机扮演重要角色,我们常常需要手机做记录,那么我们介绍三星S8手机如何使用三星笔记编辑记录笔记 操作方法 01 找到三星笔记这款软件 02 进入三星笔记,我们可以看到已经做过的笔记记 ...

  • 如何使用组策略集中部署Windows防火墙提高配置效率

    在管理规模较大的网络环境时,网络安全往往是花费精力最多的一环。就拿配置Windows XP SP2的防火墙来说,如果让网管为网内计算机逐一进行配置的话,工作量会非常大,而且在细节配置上也容易出错。那么 ...

  • linux虚拟机网络配置与网络配置常用命令使用介绍

    配置过程记录下来,防止遗忘!如有建议技术支持QQ群139785720 一.linux网络配置经常使用的命令 1)#ifconfig //查看配置的网卡 /sbin/ifconfig 2) # vi / ...

  • Win7系统自带防火墙介绍以及如何与多个防火墙政策配置的问题

    自推出Windows XP系统内置的第一个防火墙(Internet Connection防火墙)以来,微软公司一直在稳步改善其后推出的系统的防火墙功能。而在最新客户端操作系统Windows 7中的Wi ...

  • 微信读书APP中添加的笔记如何删除

    今天给大家介绍一下微信读书APP中添加的笔记如何删除的具体操作步骤.1. 首先打开手机上的微信读书APP,进入主页面后,点击右下角的我的选项.2. 在打开的我的页面,找到笔记选项,点击.3. 然后在打 ...

  • 如何把语音转化为笔记(语音笔记怎么转换成文字)

    日常工作中经常需要长时间的课程培训,记录重点知识,以前面对这些工作是很让人烦恼的,不过现在高效了很多,其实,只需要掌握其中的技巧,还有语音转文字的语音识别技术就能轻松搞定!如果是记录课程培训内容的话, ...

  • 怎样做读书笔记最好(如何记读书笔记)

    为什么我读过的书,我却什么也记不住.我的笔记呢,我想要的知识点到底记在哪个本子上了?相信很多人也像我这样有过这样感到揪心的时候.直到我前段时间看了这样的一本书:<如何有效阅读一本书>,他的 ...