36补 varnish程序解雇及配置初步、vcl使用详解及varnish命令行工具

01 varnish程序结构及配置初步

配置环境

node1: CentOS 6.7 192.168.1.121

[[email protected] ~]# yum -y install httpd

[[email protected] ~]# service httpd start

[[email protected] ~]# echo "<h1>Web1</h1>" > /var/www/html/index.html

[[email protected] ~]# yum -y install httpd

[[email protected] ~]# echo "<h1>Web2</h1>" > /var/www/html/index.html 

[[email protected] ~]# service httpd start

[[email protected] ~]# ls *rpm

varnish-3.0.6-1.el6.x86_64.rpm  varnish-libs-3.0.6-1.el6.x86_64.rpm

[[email protected] ~]# rpm -ivh *rpm

[[email protected] ~]# vim /etc/sysconfig/varnish #配置文件

修改

VARNISH_LISTEN_PORT=6081

VARNISH_LISTEN_PORT=80

添加

VARNISH_STORAGE_SHM=64M

修改

VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"

VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SHM}"

[[email protected] ~]# service varnish start

[[email protected] ~]# cd /etc/varnish/

[[email protected] varnish]# cp default.vcl{,.bak}

[[email protected] varnish]# vim default.vcl 

修改backend段的内容为:

backend default {

 .host = "192.168.1.122";

 .port = "80";

}

[[email protected] varnish]# service varnish restart

[[email protected] varnish]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

测试

#1、更改后端主机

[[email protected] ~]# cd /etc/varnish/

[[email protected] varnish]# vim default.vcl

修改backend段的内容为:

backend default {

 .host = "192.168.1.123";

 .port = "80";

}

#重新加载配置

varnish> vcl.load test1 default.vcl

200        

VCL compiled.

varnish> vcl.use test1

200  

#示例2  

[[email protected] varnish]# vim default.vcl

修改vcl_deliver段的内容为:

sub vcl_deliver {

if (obj.hits>0) {

set resp.http.X-Cache = "HIT";

} else {

set resp.http.X-Cache = "MISS";

}

return (deliver);

}

加载配置文件

varnish> vcl.load test2 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test2

200    

02 vcl使用详解

1、vcl_recv程序段

[[email protected] varnish]# vim default.vcl

去掉该程序段的所有注释,具体内容如下:

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);

}

 

#显示客户端的真实IP

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf 

修改

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

[[email protected] ~]# service httpd restart

加载配置文件:

varnish> vcl.load test3 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test3

200   

2、拒绝某个主机访问服务器

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf

在vcl_recv段中添加

if (client.ip == "192.168.1.191") {

error 404 "Not Found";

}

加载配置文件:

varnish> vcl.load test4 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test4

200   

3、移除单个缓存对象

[[email protected] varnish]# vim default.vcl

1)添加

acl purgers {

"127.0.0.1";

"192.168.1.0"/24;

}

2)修改vcl_recv中的内容为:

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 ~ purgers) {

error 405 "Method not allowed";

}

return (lookup);

}

if (req.request != "GET" &&

  req.request != "HEAD" &&

  req.request != "PUT" &&

  req.request != "POST" &&

  req.request != "TRACE" &&

  req.request != "OPTIONS" &&

  req.request != "DELETE" && req.request !="PURGE" ) {

/* Non-RFC2616 or CONNECT which is weird. */

return (pipe);

}

if (req.request != "GET" && req.request != "HEAD" && req.request != "PURGE") {

/* 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);

}  

3)修改vcl_hit段内容为:

sub vcl_hit {

if (req.request == "PURGE") {

purge;

error 200 "Purged";

}   

return (deliver);

}

4)修改vcl_miss段内容为:

sub vcl_miss {

if (req.request == "PURGE") {

purge;

error 404 "Not in cache";

}   

return (fetch);

}

5)修改vcl_pass段的内容为

sub vcl_pass {

if (req.request == "PURGE") {

error 502 "PURGE on a passed object";

}       

return (pass);

}

重新加载配置:

varnish> vcl.load test6 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test6

200        

测试:

[[email protected] varnish]# curl -I  192.168.1.121/index.html        

HTTP/1.1 200 OK

Server: Apache/2.2.15 (CentOS)

Last-Modified: Thu, 01 Sep 2016 15:14:26 GMT

ETag: "102e3c-e-53b73ab6b0642"

Content-Type: text/html; charset=UTF-8

Content-Length: 14

Accept-Ranges: bytes

Date: Thu, 01 Sep 2016 18:57:16 GMT

X-Varnish: 1231869016

Age: 0

Via: 1.1 varnish

Connection: keep-alive

X-Cache: MISS

[[email protected] varnish]# curl -I  192.168.1.121/index.html

HTTP/1.1 200 OK

Server: Apache/2.2.15 (CentOS)

Last-Modified: Thu, 01 Sep 2016 15:14:26 GMT

ETag: "102e3c-e-53b73ab6b0642"

Content-Type: text/html; charset=UTF-8

Content-Length: 14

Accept-Ranges: bytes

Date: Thu, 01 Sep 2016 18:57:18 GMT

X-Varnish: 1231869017 1231869016

Age: 2

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT

[[email protected] varnish]# curl -I -X PURGE 192.168.1.121/index.html

HTTP/1.1 200 Purged

Server: Varnish

Content-Type: text/html; charset=utf-8

Retry-After: 5

Content-Length: 380

Accept-Ranges: bytes

Date: Thu, 01 Sep 2016 18:57:22 GMT

X-Varnish: 1231869018

Age: 0

Via: 1.1 varnish

Connection: close

X-Cache: MISS

结果:成功

03 vcl使用详解及varnish命令行工具

1、管理后端主机

[[email protected] varnish]# vim default.vcl

修改backend段的内容为:

backend web1 {

 .host = "192.168.1.122";

 .port = "80";

}

backend web2 {

 .host = "192.168.1.123";

 .port = "80";

}

在vcl_recv段中添加

if (req.url ~ "test.html") {

set req.backend = web1;

} else {

set req.backend = web2;

}   

重新加载配置

varnish> vcl.load test7 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test7

200        

测试:

[[email protected] ~]# echo "<h1>Test Page on Web1</h1>" > /var/www/html/test.html

[[email protected] ~]# echo "<h1>Test Page on Web2</h1>" > /var/www/html/test.html 

[[email protected] ~]# curl 192.168.1.121/test.html

<h1>Test Page on Web1</h1>

测试成功

2、设置动静分离

[[email protected] ~]# yum -y install php

[[email protected] ~]# vim /var/www/html/index.php

<?php

phpinfo();

?>

[[email protected] ~]# service httpd restart

[[email protected] varnish]# vim default.vcl

修改backend段的内容为:

backend appsrv {

 .host = "192.168.1.122";

 .port = "80";

}

backend static {

 .host = "192.168.1.123";

 .port = "80";

}

在vcl_recv段中添加

if (req.url ~ "\.php$") {

set req.backend = appsrv;

} else {

set req.backend = static;

}   

重新加载配置:

varnish> vcl.load test8 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test8

200        

测试成功

3、定义健康状态检测

[[email protected] varnish]# vim default.vcl

添加

probe chk {

.url = "/test.html";

.window = 5;

.threshold =3;

.interval = 3s;

.timeout = 1s;

}

修改backend段的内容为:

backend appsrv {

 .host = "192.168.1.122";

 .port = "80";

 .probe = chk;

}

backend static {

 .host = "192.168.1.123";

 .port = "80";

 .probe = chk;

}

重新加载配置

varnish> vcl.load test9 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test9

200   

varnish> backend.list #显示后端所有主机

200        

Backend name                   Refs   Admin      Probe

default(192.168.1.122,,80)     1      probe      Healthy (no probe)

default(192.168.1.123,,80)     10     probe      Healthy (no probe)

web1(192.168.1.122,,80)        1      probe      Healthy (no probe)

web2(192.168.1.123,,80)        1      probe      Healthy (no probe)

appsrv(192.168.1.122,,80)      2      probe      Healthy 5/5

static(192.168.1.123,,80)      2      probe      Healthy 5/5   

测试:

把test.html改名为2.html

[[email protected] ~]# cd /var/www/html/

[[email protected] html]# mv test.html 2.html

[[email protected] html]# ll

total 8

-rw-r--r-- 1 root root 27 Sep  2 17:22 2.html

-rw-r--r-- 1 root root 14 Sep  1 23:14 index.html

[[email protected] html]# tail /var/log/httpd/access_log 

- - - [21/Oct/2016:09:48:24 +0800] "GET /test.html HTTP/1.1" 404 286 "-" "-"

varnish> backend.list

200        

Backend name                   Refs   Admin      Probe

default(192.168.1.122,,80)     1      probe      Healthy (no probe)

default(192.168.1.123,,80)     10     probe      Healthy (no probe)

web1(192.168.1.122,,80)        1      probe      Healthy (no probe)

web2(192.168.1.123,,80)        1      probe      Healthy (no probe)

appsrv(192.168.1.122,,80)      2      probe      Healthy 5/5

static(192.168.1.123,,80)      2      probe      Sick 0/5

结果:显示该网址错误,测试成功

4、如何使用director

[[email protected] varnish]# vim default.vcl 

在backend段后添加director段

director mysrvs random {

.retries = 3;

{   

.backend = appsrv;

.weight = 1;

}   

{   

.backend = static;

.weight = 1;

}   

}

在vcl_recv段中添加:

if (req.url ~ "/test.html") {

return(pass);

}

if (req.url ~ "\.php$") {

set req.backend = appsrv;

} else {

set req.backend = mysrvs;

}   

功能:动态网页访问appsrv服务器,静态网页访问mysrvs服务器。

重新加载配置:

varnish> vcl.load test10 ./default.vcl

200        

VCL compiled.

varnish> vcl.use test10

200   

时间: 2024-10-19 17:47:38

36补 varnish程序解雇及配置初步、vcl使用详解及varnish命令行工具的相关文章

详解NodeJS和命令行程序

源起 植根于Unix系统环境下的程序,很多都把贯彻Unix系统设计的哲学作为一种追求.Unix系统管道机制的发明者Douglas McIlroy把Unix哲学总结为三点: 专注做一件事,并做到极致.程序协同工作.面向通用接口,如文本数据流.随着Unix/Linux系统在服务器上影响力越发强大,以及各种跨平台解决方案的发展,这种哲学也被带到了各种平台上.若干年前,笔者第一次接触NodeJS和其包管理解决方案NPM时候,就感觉到其官方倡导的风格,和Unix系统哲学非常契合.近年来,随着NodeJS在

PC104上配置VxWorks硬盘启动详解

DEVPC104-SYS是一款在 PC104 尺寸上开发出来的嵌入式工业主板.以其小巧的体积﹑超强的功能和稳定性,可广泛应用于自动查询系统﹑POS 机﹑网络终端﹑仪器仪表﹑信息家电.工业控制等各种嵌入式领域. VxWorks 是美国 Wind River System 公司推出的一个实时操作系统.通常所指的VxWorks操作系统对应软件包括三个部分:引导程序bootrom.主操作系统vxWorks.以及用户开发程序.Tornado提供一个集成的编译bootrom.vxWorks以及用户程序的工程

Cmder命令行工具在Windows系统中的配置

一.Cmder简介 Cmder:一款用于Windows系统中,可增强传统cmd命令行工具的控制台模拟器(类似于Linux系统中的终端控制窗口) 特点: 无需安装,解压即用 可使用较多Linux命令,如:vi.vim.ls.pwd.grep.unzip.bash.perl.ssh 可在窗口内外自由使用常规的复制和粘贴操作 支持多Tab页的cmd窗口 提供了对命令窗口中的字符串进行快速搜索定位的功能 在传统cmd命令行工具的基础上,增加了Monokai配色方案,界面美观 命令窗口尺寸大小可自由调整

MySQL Server 5.0–安装及配置/MySQLInstanceConfig.exe用法详解

MySQL Server 5.0–安装及配置/MySQLInstanceConfig.exe用法详解 http://blog.csdn.net/feihong247/article/details/7791105 配置MySQL步骤: 1.       运行MySQL Server安装目录下bin/MySQLInstanceConfig.exe.出现如下所示的向导界面 . 点击"Next"进入下一步. 2.       如果MySQLInstanceConfig在MySQL Serve

robots.txt文件配置和使用方法详解

robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件?下面,就这些问题进行剖析,让你深入认识robots.txt文件. robots.txt文件是什么? robots.txt是一个简单的以.txt结尾的文本文件,是搜索引擎Robot(也叫搜索引擎机器人)程序抓取网页时要访问的第一个文件. robots.txt文件有什么作用? 通过robots.txt

Windows 编程,程序编译使用的命令行工具。

Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件中包含了对程序中所使用资源(菜单.图标等)的描述.rc.exe将.rc格式的文件编译为.res文件,供链接器链接到可执行文件中. 3.link.exe是Windows平台的链接器,它将cl.exe编译生成的obj文件,资源编译器生成的.res文件,以及lib目录下的lib文件等链接成可执行的exe文

在ASP.NET 5应用程序中的跨域请求功能详解

在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏感数据,但是一些特殊情况下,你需要允许另外一个站点跨域请求你的网站. 跨域资源共享(CORS:Cross Origin Resources Sharing)是一个W3C标准,它允许服务器放宽对同域策咯的限制,使用CORS,服务器可以明确的允许一些跨域的请求,并且拒绝其它的请求.CORS要比JSONP

Tomcat 端口配置,及原理详解

Tomcat 端口配置,及原理详解 作者:Ezitai 如果想深入了解tomcat的各个端口及配置,建议通读文章,对初学者十分有利,整理自网络. 1 tomcat 文件配置详细说明 tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口配置路径为tomcat\ conf\service.xml 修改Shutdown端口(默认为8005端口) <Server port="8005" shutdown=&

Spring Boot 配置加载顺序详解

使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 Spring Boot 里面,可以使用以下几种方式来加载配置.本章内容基于 Spring Boot 2.0 进行详解. 1.properties文件: 2.YAML文件: 3.系统环境变量: 4.命令行参数: 等等-- 我们可以在 Spring Beans 里面直接使用这些配置文件中加载的值,如: