共计 5341 个字符,预计需要花费 14 分钟才能阅读完成。
实验背景:公司有一台 BBS 服务器,用的是 LNMP 的架构搭建的。正好手头有一台空闲的虚拟机,于是想着给 BBS 前端加一台缓存服务器。于是选定了 varnish,搜了很多教程,跌跌撞撞的完成了配置。这其中很多配置的作用我也不是十分了解,这里先给出大体的配置,之后有时间会研究一下其中配置的原理和具体作用。
实验系统:CentOS 6.4_x86_64
实验前提:防火墙和 selinux 都关闭
实验说明:本实验共有 2 台主机,IP 分配如拓扑
实验软件:varnish-3.0.7-1 varnish-libs-3.0.7-1
下载地址:http://pan.baidu.com/s/1pJOOc1X
或者:
—————————————— 分割线 ——————————————
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是 www.linuxidc.com
具体下载目录在 /2015 年资料 / 8 月 /18 日 / 利用 Varnish 做 Discuz 论坛的缓存服务器 /
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
—————————————— 分割线 ——————————————
实验拓扑:
二、访问测试:
1. 浏览器打开 http://192.168.70.186,并随机访问一些内容:
2.varnish 状态查看:
varnishstat
3. 图表查看:
varnishhist
4. 前端客户端用浏览器的 F12 功能查看缓存是否命中,这里用 chrome 演示:
至此,缓存服务器搭建完毕,这其中还会有些问题,今天先粗浅的演示一下
一、安装并配置 varnish
1. 在 70.186 上直接使用 yum 安装:
yum -y install varnish-3.0.7-1.el6.x86_64.rpm varnish-libs-3.0.7-1.el6.x86_64.rpm
2. 编辑 /etc/sysconfig/varnish 文件:
vim /etc/sysconfig/varnish
————————————————>
## Alternative 3, Advanced configuration
VARNISH_VCL_CONF=/etc/varnish/default.vcl // 使用的 vcl 文件
VARNISH_LISTEN_PORT=80 //varnish 自己监听的端口
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 //admin 管理接口使用的 ip
VARNISH_ADMIN_LISTEN_PORT=6082 //admin 管理接口使用的端口
VARNISH_SECRET_FILE=/etc/varnish/secret // 密码文件
VARNISH_MIN_THREADS=50 // 最小进程数
VARNISH_MAX_THREADS=1000 // 最大进程数
VARNISH_THREAD_TIMEOUT=120 // 超过此时间回收空闲进程
VARNISH_STORAGE_SIZE=1G // 存储文件大小
VARNISH_STORAGE=”malloc,${VARNISH_STORAGE_SIZE}” // 指明使用存储的类型及文件
VARNISH_TTL=120
DAEMON_OPTS=”-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}”
3. 编辑 vcl 文件:
vim /etc/varnish/default.vcl
———————————————————>
backend default {
.host = “192.168.90.186”;
.port = “80”;
}
acl local {
“localhost”;
“127.0.0.1”;
}
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 == “PURGE”) {
if (!client.ip ~ local) {
error 405 “Not Allowed.”;
}
return (lookup);
}
if (req.request == “GET” && req.url ~ “\.(jpg|png|gif|swf|jpeg|flv|bmp|gz|tgz|bz2|tbz|js|css|ico)$”) {
unset req.http.cookie;
}
if (req.request == “GET” && req.url ~ “\.(js|css).*$”) {
unset req.http.cookie;
}
if (req.url ~ “^/images”) {
unset req.http.cookie;
}
if (req.request != “GET” &&
req.request != “HEAD” &&
req.request != “PUT” &&
req.request != “POST” &&
req.request != “TRACE” &&
req.request != “OPTIONS” &&
req.request != “DELETE”) {
return (pipe);
}
if (req.request != “GET” && req.request != “HEAD”) {
return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
if (req.request == “GET” && req.url ~ “\.(php)($|\?)”) {
return (pass);
}
return (lookup);
}
sub vcl_pipe {
return (pipe);
}
sub vcl_pass {
if (req.request == “PURGE”) {
error 502 “PURGE on a passed object”;
}
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 {
if (!obj.ttl > 0s) {
return (pass);
}
if (req.request == “PURGE”) {
purge;
error 200 “Purged.”;
}
return (deliver);
}
sub vcl_miss {
if (req.request == “PURGE”) {
purge;
error 404 “Not in cache”;
}
return (fetch);
}
sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == “*”) {
set beresp.ttl = 120 s;
return (hit_for_pass);
}
if (beresp.http.Pragma ~ “no-cache” ||
beresp.http.Cache-Control ~ “no-cache” ||
beresp.http.Cache-Control ~ “private”) {
return (hit_for_pass);
}
if (req.request == “GET” && req.url ~ “\.(bmp|jpeg|jpg|png|gif|svg|png|ico|txt|css|js|html|htm)$”) {
unset beresp.http.set-cookie;
set beresp.ttl = 1h;
} else {
set beresp.ttl = 1800s;
}
return (deliver);
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = “Hit Via” + ” ” + server.hostname;
} else {
set resp.http.X-Cache = “Miss Via” + ” ” + server.hostname;
}
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}
4. 启动 varnish,查看端口,并打开浏览器测试:
service varnish start
ss -tnl
二、访问测试:
1. 浏览器打开 http://192.168.70.186,并随机访问一些内容:
2.varnish 状态查看:
varnishstat
3. 图表查看:
varnishhist
4. 前端客户端用浏览器的 F12 功能查看缓存是否命中,这里用 chrome 演示:
至此,缓存服务器搭建完毕,这其中还会有些问题,今天先粗浅的演示一下.
缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm
缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm
Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm
CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm
RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm
利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm
缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm
Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm
Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm
Varnish 的详细介绍 :请点这里
Varnish 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/121844.htm