博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安装配置Varnish3.0手记
阅读量:6803 次
发布时间:2019-06-26

本文共 4720 字,大约阅读时间需要 15 分钟。

 
在内网的vps上安装Varnish的最新版3.0来用做测试

Varnish有centos下的rpm和ubuntu下的deb二进制包下载,但我选择的是源码编译安装

先下载 wget

tar -xzvf varnish-3.0.0.tar.gz

 

yum install gcc

yum install gcc-c++ libstdc++-devel

yum install -y httpd-devel pcre perl pcre-devel zlib zlib-devel GeoIP GeoIP-devel

 

Varnish需要pcre支持,如果服务器没有安装pcre-devel会提示需要指定prce目录。

Centos服务器上使用yum install pcre-devel安装

 

解压varnish进行编译安装

cd varnish-3.0.0

./autogen.sh

./configure --prefix=/usr/local/varnish PKG_CONFIG_PATH=/usr/lib/pkgconfig

 

make

make install

安装成功后,安装的目录是

cd /usr/local/varnish/sbin

./varnishd -V

查看版本,看是否安装成功

测试varnish

先编辑配置文件

vi /usr/local/varnish/etc/varnish/default.vcl

 

 

# This 
is a basic VCL configuration file 
for varnish.  See the vcl(
7)
# man page 
for details on VCL syntax and semantics.
#
# Default backend definition.  Set 
this to point to your content
# server.
#
 backend 
default {
     .host = 
"
192.168.88.156
";
     .port = 
"
80
";
     ###下面三行为新加配
     .connect_timeout = 1s;
     .first_byte_timeout = 5s;
     .between_bytes_timeout = 2s;
 }
#
# Below 
is a commented-
out copy of the 
default VCL logic.  If you
# redefine any of these subroutines, the built-
in logic will be
# appended to your code.
 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);
     }
     
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);
     }
     
return (lookup);
 }
#
 sub vcl_pipe {
#     # Note that only the first request to the backend will have
#     # X-Forwarded-For 
set.  If you use X-Forwarded-For and want to
#     # have it 
set 
for all requests, make sure to have:
#     # 
set bereq.http.connection = 
"
close
";
#     # here.  It 
is not 
set by 
default 
as it might 
break some broken web
#     # applications, like IIS with NTLM authentication.
     
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);
     }
     
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);
 }

 

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1024m -T 127.0.0.1:200 -a 0.0.0.0:80

 

现在可以打开varnish了

    (开启varnish的端口号)

戴图显示,nginx 为177上运行的web服务器,出现了varnish字样,表示缓存架设成功,已正常工作了。

 

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

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

配置开机自动启动Varnish

vi /etc/rc.local

  在末尾增加以下内容:

引用
ulimit -SHn 51200
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file,/var/vcache/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/logs/youvideo.log &

 优化Linux内核参数

vi /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

 查看Varnish服务器连接数与命中率
/usr/local/varnish/bin/varnishstat

 

配置启动脚本: 

mkdir /cache/varnish/V -p

vi /usr/local/varnish/sbin/start.sh

 

#!/bin/sh

#file:start.sh
date -u
/usr/local/varnish/sbin/varnishd -a 0.0.0.0:80  -s file,/cache/varnish/V,1024m  -f         /usr/local/varnish/etc/varnish/default.vcl  -p thread_pool_max=1500  -p thread_pools=5  -p listen_depth=512 

chmod 777 start.sh

运行:

/usr/local/varnish/sbin/start.sh

转载地址:http://agcwl.baihongyu.com/

你可能感兴趣的文章
英国《数字经济法案》
查看>>
Asp.net与Flex交互测试记录
查看>>
后退时保存表单状态
查看>>
泛函编程(13)-无穷数据流-Infinite Stream
查看>>
各驱动器和URL
查看>>
javascript生成二维码
查看>>
开发https应用
查看>>
CF916B
查看>>
BestCoder Round #38
查看>>
详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)
查看>>
linux双网卡双网关,不同IP段的设置
查看>>
javascript数据基本类型和引用类型
查看>>
vs2010 关于缺少Microsoft.Practices.EnterpriseLibrary.Data.dll 等的解决办法
查看>>
OCP读书笔记(17) - 计划任务
查看>>
字符编码
查看>>
Linux Virtualization with Xen
查看>>
c++之单例模式
查看>>
案例12:地下人防电影院防火案例分-析案例13:地下汽车库建筑
查看>>
工作圈redis 使用
查看>>
P2153 [SDOI2009]晨跑
查看>>