利用varnish做Discuz论坛的缓存服务器
实验背景:公司有一台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/1hq8hgoO
实验拓扑:

一、安装并配置varnish
1.在70.186上直接使用yum安装:
yum -y install varnish-3.0.-.el6.x86_64.rpm varnish-libs-3.0.-.el6.x86_64.rpm
2.编辑/etc/sysconfig/varnish文件:
vim /etc/sysconfig/varnish
------------------------------------------------>
## Alternative , Advanced configuration VARNISH_VCL_CONF=/etc/varnish/default.vcl //使用的vcl文件
VARNISH_LISTEN_PORT= //varnish自己监听的端口
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 //admin管理接口使用的ip
VARNISH_ADMIN_LISTEN_PORT= //admin管理接口使用的端口
VARNISH_SECRET_FILE=/etc/varnish/secret //密码文件
VARNISH_MIN_THREADS= //最小进程数
VARNISH_MAX_THREADS= //最大进程数
VARNISH_THREAD_TIMEOUT= //超过此时间回收空闲进程
VARNISH_STORAGE_SIZE=1G //存储文件大小
VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" //指明使用存储的类型及文件
VARNISH_TTL=
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 = "";
} acl local {
"localhost";
"127.0.0.1";
} sub vcl_recv {
if (req.restarts == ) {
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 "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 "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 "Purged.";
}
return (deliver);
} sub vcl_miss {
if (req.request == "PURGE") {
purge;
error "Not in cache";
}
return (fetch);
} sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
set beresp.ttl = 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 > ) {
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演示:


至此,缓存服务器搭建完毕,这其中还会有些问题,今天先粗浅的演示一下,谢谢大家!QQ:82800452
利用varnish做Discuz论坛的缓存服务器的更多相关文章
- 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现 ...
- 高性能缓存服务器Varnish
一.Varnish概述 Varnish是一款高性能的.开源的反向代理服务器和缓存服务器,计算机系统的除了有内存外,还有CPU的L1.L2,甚至L3级别的缓存,Varnish的设计架构就是利用操作系统的 ...
- Varnish缓存服务器的搭建配置手册
Varnish缓存服务器的搭建配置手册 1.Varnish官方环境依赖提示 Installing Varnish Cache is as simple as enabling our package ...
- discuz论坛X3升级时 文件下载出现问题,请查看您的服务器网络以及data目录是否有写权限
discuz论坛2.5升级X3时候, 在线升级一半提示: 文件 static/image/postbg/3.jpg 下载出现问题,请查看您的服务器网络以及data目录是否有写权限,请确认无误后点击确定 ...
- 关于服务器防火墙和discuz论坛的问题
今天做了一个b2b商城,其中的论坛用的是discuz论坛 .net版本,主页要取出其中三个板块的最新帖子数据,安装好后,帖子数据在dnt_posts1数据表里,其中的tid为外链表dnt_forums ...
- Varnish,Nginx搭建缓存服务器
Varnish,Nginx搭建缓存服务器 一. varnish 1.安装pcre库,兼容正则表达式 # tar -zxvf pcre-8.10.tar.gz # cd pcre-8.10 # ./co ...
- 自己动手利用CentOS6.5 搭建php环境安装discuz论坛
1.安装搭建论坛必要的软件 apache php mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源,包涵 ...
- Nginx做缓存服务器
Nginx做缓存服务器 Nginx配置 1.主配置/etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; ...
- discuz论坛后台部分设置更改之后,清除了缓存网站前台不更新不生效的解决办法
discuz论坛后台部分设置更改之后,清除了缓存但网站前台不更新不生效的解决办法 在config/config_global.php 把 $_config['memory']['eaccelera ...
随机推荐
- Win10 UWP 开发系列:支持异步的SQLite
上篇文章已经实现了在UWP中使用SQLite作为本地存储,作为移动端的程序,及时响应用户的操作是提高用户体验的重要途径,因此UWP的很多api都是异步的.那么如何使SQLite支持异步呢? 参考SQL ...
- 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧
[源码下载] 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧 作者:webabcd 介绍背水一战 Wind ...
- JavaScript一词被《牛津大词典》收录了
早上看VS Team的推特发了这个图片,以前总爱问Java怎么读,现在好了,有标准发音了. 确定是 扎瓦·死磕瑞普特 ,哈哈,以后不要再念加瓦了. …… Last month JavaScript r ...
- jQuery中eq()方法用法实例
本文实例讲述了jQuery中eq()方法用法.分享给大家供大家参考.具体分析如下: 此方法能够获取匹配元素集上的相应位置索引的元素. 匹配元素集上元素的位置索引是从0开始的. 语法结构: 复制代码 代 ...
- 关于WebBrowser访问百度地图
前段时间遇到一个困惑用WebBrowser访问百度地图的时候,百度会自动转至让下载sdk的页面,经过一个仁兄的点拨,可以改变WebBrowser的agent来骗过网站.经过试验成功.贴源码如下: st ...
- FacadePattern(门面模式)
/** * 外观模式(门面模式) * @author TMAC-J * 外观模式是通过访问一个前台来实现对子系统的访问,其和代理模式的区别是 * 代理模式是通过代理一个类的形式,也就是说一对一的关系 ...
- [Tool] SourceTree操作中遇到错误(Filename too long)的解决方案
[Tool] SourceTree操作中遇到错误(Filename too long)的解决方案 问题情景 使用SourceTree,可以方便开发人员使用图形化接口的Git指令来管理原始码.但是在Wi ...
- AnimatedModal.js – CSS3 全屏模态窗口
AnimatedModal.js 是一个用来创建一个全屏模态窗口的 jQuery 插件,基于 CSS3 过渡实现.您可以利用 Animate.css 中的转换或自行创建自己的过渡效果.支持 Firef ...
- jquery叠加页片自动切换特效
查看效果:http://keleyi.com/keleyi/phtml/jqtexiao/34.htm 下面是HTML代码: <!DOCTYPE html> <html xmlns= ...
- javascript类型系统——正则表达式RegExp类型
× 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String ...