1.安装准备

yum -y install tomake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

2.编译安装varnish

cd varnish-3.0.2

./configure --prefix=/usr/local/varnish

make && make install

3.配置文件

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

==============================================================================

acl purge {#推送地址ACL

"localhost";

"127.0.0.1";

"192.168.1.71"/32;

}

backend default {#默认源地址及端口

.host = "192.168.1.151";

.port = "80";

}

backend www1 {#www1后端服务器及端口

.host = "192.168.1.150";

.port = "80";

}

#backend www2 {          #www2后端服务器及端口

#    .host = "192.168.1.151";

#    .port = "80";

#}

backend www3 {          #www3后端服务器及端口

.host = "192.168.1.51";

.port = "80";

}

backend www4 {          #www4后端服务器及端口

.host = "192.168.1.52";

.port = "80";

}

backend www5 {          #www5后端服务器及端口

.host = "192.168.1.53";

.port = "80";

}

backend www6 {          #www6后端服务器及端口

.host = "192.168.1.56";

.port = "80";

}

##############配置后端服务器组,进行健康检测6秒,使用random方式设置权重########

#########另一种方式round-robin则默认轮询机制####################

director www random {

.retries = 6;

{ .backend = www1;

.weight = 2;

}

#{ .backend = www2;

#  .weight = 2;

#        }

{ .backend = www3;

.weight = 2;

}

{ .backend = www4;

.weight = 2;

}

{ .backend = www5;

.weight = 2;

}

{ .backend = www6;

.weight = 2;

}

}

sub vcl_recv {

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") {#推送ip访问限制

if (!client.ip ~ purge) {

error 405 "Not allowed.";

}

return(lookup);

}

if (req.http.host ~ "(?i).*(haha|heihei|xixi).(com|com\.cn|cn)") { #网站域名访问限制,判断访问域名是否为*.haha.com,如是访问www源地址,否返回‘Unknown virtual host’ 注:(?i) 不区分大小写

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

set req.backend = www;

return(pipe);

}

elseif(req.url ~ "get_comment_number_ifram"){  #判断是否含有get_comment_number_ifram,有则缓存

set req.backend = www;

return(lookup);

}

elseif(req.url ~ "\.(php|cgi)($|\?)"){#判断是否为php、cgi动态文件,如是去后端服务器抓取,否则缓存文件

set req.backend = www;

return(pass);

}

else {

#if (req.request == "GET" && req.url ~ "\.(css|mp3|jpg|png|gif|swf|jpeg|ico)$"){unset req.http.cookie;} #删除图片cookie提高命中率,否则命中率>对于论坛等会很低

set req.backend = default;

return(lookup);

}

}

else {

#set req.backend = default;

return(lookup);

#error 404 "Unknown virtual host";

#return(lookup);

}

}

sub vcl_hit {

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

set obj.ttl = 0s;

error 200 "Purged.";

}

}

==============================================================================

4.启动

设置内核参数:

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 = 1024 65000

net.ipv4.tcp_max_syn_backlog = 819200

net.ipv4.ip_conntrack_max = 819200

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

net.ipv4.netfilter.ip_conntrack_max = 8192000

net.core.netdev_max_backlog = 300000

启动

ulimit -SHn 36870

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,4G -T 127.0.0.1:2000

访问日志进程

/usr/local/varnish/bin/varnishncsa -D -w /var/log/varnish/varnish.log

日志定时切换脚本

cat /home/crontab/cut_varnish_log.sh

#!/bin/sh

# This file run at 00:05

date=$(date -d "yesterday" +"%Y-%m-%d")

date1=$(date -d "4 day ago" +"%Y-%m-%d")

pkill -9 varnishncsa

mv /var/log/varnish/varnish.log /var/log/varnish/varnish_${date}.log

/usr/local/varnish/bin/varnishncsa -D  -w /var/log/varnish/varnish.log

rm -f /var/log/varnish/varnish_${date1}.log

定时任务:

50***/home/crontab/cut_varnish_log.sh

状态查看:

/usr/local/varnish/bin/varnishstat

指定域名清缓存

./varnishadm ban "req.http.host ~ ^www.haha.com && req.url ~ /index.html"

5.其他:

varnish内置的例程

vcl_recv

有请求到达后成功接收并分析时被调用,一般以以下几个关键字结束。

error code [reason] 返回code给客户端,并放弃处理该请求

pass 进入pass模式,把控制权交给vcl_pass

pipe 进入pipe模式,把控制权交给vcl_pipe

lookup 在缓存里查找被请求的对象,根据查找结果把控制权交给vcl_hit或vcl_miss

vcl_pipe

进入pipe模式时被调用。请求被直接发送到backend,后端和客户端之间的后继数据不进行处理,只是简单传递,直到一方关闭连接。一般以以下几个关键字结束。

error code [reason]

pipe

vcl_pass

进入pass模式时被调用。请求被送到后端,后端应答数据送给客户端,但不进入缓存。同一连接的后继请求正常处理。一般以以下几个关键字结束。

error code [reason]

pass

vcl_hash

目前不使用

vcl_hit

在lookup以后如果在cache中找到请求的内容事调用。一般以以下几个关键字结束。

error code [reason]

pass

deliver 将找到的内容发送给客户端,把控制权交给vcl_deliver.

vcl_miss

lookup后但没有找到缓存内容时调用,可以用于判断是否需要从后端服务器取内容。一般以以下几个关键字结束。

error code [reason]

pass

fetch 从后端取得请求的内容,把控制权交给vcl_fetch.

vcl_fetch

从后端取得内容后调用。一般以以下几个关键字结束。

error code [reason]

pass

insert 将取到的内容插入缓存,然后发送给客户端,把控制权交给vcl_deliver

vcl_deliver

缓存内容发动给客户端前调用。一般以以下几个关键字结束。

error code [reason]

deliver 内容发送给客户端

vcl_timeout

在缓存内容到期前调用。一般以以下几个关键字结束。

fetch 从后端取得该内容

discard 丢弃该内容

vcl_discard

由于到期或者空间不足而丢弃缓存内容时调用。一般以以下几个关键字结束。

discard 丢弃

keep 继续保留在缓存里

如果这些内置例程没有被定义,则执行缺省动作

转载于:https://blog.51cto.com/nebula/1259656

Varnish 安装部署相关推荐

  1. Varnish安装部署文档

    简述:Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. 系统环境: CentOS re ...

  2. 2021年大数据Flink(三):​​​​​​​Flink安装部署 Local本地模式

    目录 Flink安装部署 Local本地模式 原理 操作 测试 Flink安装部署 Flink支持多种安装模式 - Local-本地单机模式,学习测试时使用 - Standalone-独立集群模式,F ...

  3. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  4. 【SVN】1. SVN 安装部署

    一. SVN概述 1. SVN 简介   Subversion 版本控制系统 简称 SVN.   SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯.   SVN ...

  5. Docker概述和安装部署

    概述 Docker产生的背景 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后 ...

  6. DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...

    吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1 数字签名服务器v2.1.1 安装部署手册 (VSTK接口 COM版) V2.1.1 长 春 吉 大 正 元 信 息 技 术 ...

  7. Airflow安装部署

    Airflow安装部署 新闻信息是通过爬虫获取,使用scrapy框架进行爬虫任务:使用airflow工作流监控平台对爬虫任务进行管理.监控(可使用CeleryExecutor分布式,也可使用Local ...

  8. logicaldoc 6.5 结合postgresql 9.x安装部署—基于windows平台

    2019独角兽企业重金招聘Python工程师标准>>> 湘中朱生   2012年9月于深圳 说明:原创内容,请勿转载! <1> 从官网下载部署包 官方网站提供源码包和集成 ...

  9. Centos6.0 64位MySQL 5.5.20 CMake 安装部署

    Centos6.0 64位下 MySQL 5.5.20 CMake 安装部署 一.下载所需软件 linux用 wget 下载需要的软件,保存到目录 /usr/local/src 下 wget ftp: ...

  10. 【原创 HadoopSpark 动手实践 1】Hadoop2.7.3 安装部署实践

    目录: 第一部分:操作系统准备工作: 1. 安装部署CentOS7.3 1611 2. CentOS7软件安装(net-tools, wget, vim等) 3. 更新CentOS7的Yum源,更新软 ...

最新文章

  1. Python之两个列表一起打乱
  2. 数组子数组求最大值1
  3. Java 网关-Servlet Gateway
  4. 解决mysql不能远程登入的问题
  5. 17 SD配置-企业结构-分配-分配允许的信用控制范围给公司码
  6. Andorid AlertDialog 点击后自动消失_为何孙悟空成佛后,金箍儿就会自动消失?金箍儿究竟代表什么...
  7. lamp整合三连发(1)
  8. Python3,区区几行代码,turtle替我实现了我多年的绘画梦。
  9. 什么是 360 评估?
  10. [ 树形DP ] BZOJ4987
  11. 没有人能随随便便成功,但没有必要活得像尘埃一样卑微
  12. 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
  13. 【独家】微软中国开始挖人,看中搜索人才
  14. Windows删除文件夹提示“文件夹被某一程序占用”,删除失败
  15. 计算机二级报名时间表天津内容,天津市2018年上半年计算机二级报名通知
  16. 如何通过Oracle官网下载jdk历史版本
  17. 温故知新——五大常用算法总结
  18. NE 和 KE 堆栈脚本解析
  19. ROS开发实践-QT工具箱
  20. 几种数字传感器介绍(一)————温湿度传感器(HDC1080)

热门文章

  1. 姚前:算法经济与算法监管
  2. (转)NYU教授给写AI新闻的记者们写了一封推心置腹的信,你也应该读读
  3. 由争议拼多多之货找人想到的 BlockChain Storage 之5、区块链存储 - 存储供需的智能匹配...
  4. 小身材大能耐,面向物联网开发的 ACRN Hypervisor开源啦!
  5. 【路径规划】基于matalb穷举法机器人栅格地图避障路径规划【含Matlab源码 1675期】
  6. 毕设题目:Matlab瑕疵检测
  7. 【优化算法】天牛须搜索优化粒子群算法【含Matlab源码 1256期】
  8. 【表盘识别】基于matlab Hough变换指针式仪表识别(倾斜矫正)【含Matlab源码 1058期】
  9. 【图像增强】基于matlab PSO寻优ACE算法图像增强【含Matlab源码 088期】
  10. mysql 回滚_【133期】面试官:你说熟悉MySQL事务,那来谈谈事务的实现原理吧!...