varnish的基本配置

主程序:varnish

配置文件:

·/etc/varnish/varnish.params—配置varnish服务进程的工作特性,例如监听的地址和端口,缓存机制;

·/etc/varnish/default.vcl—配置各Child/Cache线程的缓存工作属性;

VCL状态引擎:

varnish的基本配置

内建变量:

·req.*:request,表示由客户端发来的请求报文相关;
·bereq.*:由varnish发往BE主机的httpd请求相关;
·beresp.*:由BE主机响应给varnish的响应报文相关;
·resp.*:由varnish响应给client相关;
·obj.*:存储在缓存空间中的缓存对象的属性;只读;

常用变量:
·bereq.*, req.*:
    bereq.http.HEADERS
    bereq.request:请求方法;
    bereq.url:请求的url;
    bereq.proto:请求的协议版本;
    bereq.backend:指明要调用的后端主机;
    req.http.Cookie:客户端的请求报文中Cookie首部的值;
    req.http.User-Agent ~ “chrome”
·beresp.*, resp.*:
    beresp.http.HEADERS
    beresp.status:响应的状态码;
    reresp.proto:协议版本;
    beresp.backend.name:BE主机的主机名;
    beresp.ttl:BE主机响应的内容的余下的可缓存时长;
·obj.*
    obj.hits:此对象从缓存中命中的次数;
    obj.ttl:对象的ttl值
·server.*
    server.ip
    server.hostname
·client.*
    client.ip

基本配置目录:

  1. 交互式配置
  2. 对某种请求不检查缓存
  3. 拒绝某种请求访问
  4. 对公开资源,取消私有标记,并设定缓存时长
  5. 显示后端主机IP
  6. 根据purge请求清除缓存
  7. 设置acl访问控制
  8. 用ban命令清除缓存
  9. 配置varnish后端多台主机
  10. varnish动静分离
  11. 对后端主机进行健康状态检测
  12. varnish的性能优化
  13. varnish日志查看

1.交互式配置

varnishadm
登录:
    -S /etc/varnish/secret -T 127.0.0.1:80
配置文件相关:
    vcl.list :状态引擎列表;
    vcl.load:装载,加载并编译;
    vcl.use:激活;
    vcl.discard:删除;
    vcl.show [-v] <configname>:查看指定的配置文件的详细信息,可看默认配置;
运行时参数:
    param.show -l:显示列表;
    param.show <PARAM>
    param.set <PARAM> <VALUE>
缓存存储:
    storage.list
后端服务器:
    backend.list

2.对某种请求不检查缓存

示例:
vcl_recv {
    if (req.url ~ “(?i)^/(login|admin)”) {
    return(pass);
}
}

3.拒绝某种请求访问

示例:
vcl_recv {
    if (req.http.User-Agent ~ “(?i)curl”) {
    return(synth(405));
}
}

4.对公开资源,取消私有标记,并设定缓存时长

示例:
if (beresp.http.cache-control !~ “s-maxage”) {
if (bereq.url ~ “(?i)\.(jpg|jpeg|png|gif|css|js)$”) {
    unset beresp.http.Set-Cookie;
    set beresp.ttl = 3600s;
}
}

5.显示后端主机IP

示例:
if (req.restarts == 0) {
if (req.http.X-Fowarded-For) {
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “,” + client.ip;
} else {
    set req.http.X-Forwarded-For = client.ip;
}
}

6.根据purge请求清除缓存

示例:
sub vcl_recv {
    if (req.method == “PURGE”) {
    return(purge);
}
}

7.设置acl访问控制

示例:
acl purgers {
“127.0.0.0”/8;
“10.1.0.0”/16;
}
sub vcl_recv {
    if (req.method == “PURGE”) {
    if (!client.ip ~ purgers) {
    return(synth(405,”Purging not allowed for ” + client.ip));
}
    return(purge);
}
}

8.用ban命令清除缓存

示例:
ban req.url ~ ^/javascripts
ban req.url ~ /js$

9.配置varnish后端多台主机

示例:
import directors; # 导入模块
backend server1 {
    .host = “172.16.42.2”;
    .port = “80”;
}
backend server2 {
    .host = “172.16.42.3”;
    .port = “80”;
}
sub vcl_init {
    new websrvs = directors.round_robin();
    websrvs.add_backend(server1);
    websrvs.add_backend(server2);
}
sub vcl_recv {
# 用哪一组server来请求
set req.backend_hint = websrvs.backend();
}

10.varnish动静分离

示例:
backend default {
    .host = “172.16.42.10”;
    .port = “80”;
}
backend appsrv {
    .host = “172.16.42.2”;
    .port = “80”;
}
sub vcl_recv {
if (req.url ~ “(?i)\.php$”) {
    set req.backend_hint = appsrv;
} else {
    set req.backend_hint = default;
}
}

11.对后端主机进行健康状态检测

.probe:定义健康状态检测方法;
.url:检测时请求的URL,默认为”/”;
.request:发出的具体请求;
.window:基于最近的多少次检查来判断其健康状态;
.threshhold:最近.window中定义的这么次检查中至有.threshhold定义的次数是成功的;
.interval:检测频度;
.timeout:超时时长;
.expected_response:期望的响应码,默认为200;
示例:
backend server1 {
    .host = “172.16.42.3”;
    .port = “80”;
    .probe = {
    .url= “/.healthcheck.html” #得先创建这个测试页面;
    .timeout= 1s;
    .interval= 2s;
    .window=5;
    .threshold=5;
    }
}

12.varnish的性能优化

·thread_pools: 最好小于或等于CPU核心数量;
·thread_pool_max:每线程池的最大线程数;
·thread_pool_min:额外意义为“最大空闲线程数”;
·thread_pool_timeout:线程超时时间
·thread_pool_add_delay:新创建线程
·thread_pool_destroy_delay:杀死空闲线程延迟时间
设置方式:
/etc/varnish/varnish.params (永久有效)
param.set
示例:
DAEMON_OPTS=”-p thread_pools=6 -p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300″

13.varnish日志查看

1、varnishstat – Varnish Cache statistics
    -1
    -1 -f FILED_NAME
    -l:可用于-f选项指定的字段名称列表;
    MAIN.cache_hit
    MAIN.cache_miss
    示例:
    varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss
    varnishstat -l -f MAIN -f MEMPOOL
2、varnishtop – Varnish log entry ranking
    -1 Instead of a continously updated display, print the statistics once and exit.
    -i taglist,可以同时使用多个-i选项,也可以一个选项跟上多个标签;
    -I <[taglist:]regex>
    -x taglist:排除列表
    -X <[taglist:]regex>
3、varnishlog – Display Varnish logs
4、varnishncsa – Display Varnish logs in Apache / NCSA combined log format

原创文章,作者:z long,如若转载,请注明出处:http://www.178linux.com/84224

(0)
z longz long
上一篇 2017-08-08 13:52
下一篇 2017-08-08 14:16

相关推荐

  • 第二周的作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 命令:ls NAME:用于列出目录的内容; SYNOPSIS:ls [OPTION]… [FILE]… FILE: 如果FILE是个文件的话,则显示文件名; 如果FILE是个目录的话,则列出目录的内容; OPTION: -l:显示长格式的信息,一共包含了7个…

    Linux干货 2016-11-23
  • linux的一些简单的命令与操作

    1生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 首先通过hwclock,clock:显示硬件时间,然后通过hwclock –s来以硬件时间为准。校正系统时间。 2生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在管理工具退出的情况下,脚本依然能正常运行。 首先看看系统里面按没安装screen,没的话要安装。 安装:首先先把光盘…

    Linux干货 2016-10-19
  • linux一周学习总结

          对于linux,之前也完全没有接触过,完全零基础小白。来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总结。 一、关于SHELL Shell     查询当前系统使用了哪个shell   &n…

    2017-07-15
  • 22期第六周课堂作业

    1.vim编辑器     文本编辑器:         文本:纯文本,ASCII text;Unicode;     文本编辑种类:         行编辑器:sed         全屏编辑器:na…

    Linux干货 2016-09-26
  • N28-第三周

    1. 列出當前系統上所有已經登入的用戶的用戶名,注意:同一個用戶登入多次,則只顯示一次即可。
    2. 取出最後登入到當前系統的用戶的相關信息。
    3. 取出當前系統上被用戶當做其默認shell的最多的那個shell。
    4. 將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改為大寫後保存至/tmp/maxusers.txt文件中。
    5. 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6. 列出/etc目錄下所有以.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中。
    7. 顯示/var目錄下一級子目錄或文件的總各數。
    8. 取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9. 將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法並完成以下練習:
    (1) 創建組distro,其GID為2016。
    (2) 創建用戶mandriva,其ID號為1005,基本組為distro。
    (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux。
    (4) 給用戶mageia添加密碼,密碼為mageedu。
    (5) 刪除mandriva,但保留其家目錄。
    (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin。
    (7) 修改slackware的默認shell為/bin/tcsh。
    (8) 為用戶slackware新增附加組admins。

    2017-12-19
  • 编译内核

     编译内核: 步骤: (1) 准备好开发环境 (2) 获取目标主机上硬件设备的相关信息 (3) 获取目标主机系统功能的相关信息         例如:需要启用相应的文件系统 (4) 获取内核源代码包 www.kernel.org  

    Linux干货 2018-01-01