Varnish 安装部署
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 安装部署相关推荐
- Varnish安装部署文档
简述:Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. 系统环境: CentOS re ...
- 2021年大数据Flink(三):Flink安装部署 Local本地模式
目录 Flink安装部署 Local本地模式 原理 操作 测试 Flink安装部署 Flink支持多种安装模式 - Local-本地单机模式,学习测试时使用 - Standalone-独立集群模式,F ...
- Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...
- 【SVN】1. SVN 安装部署
一. SVN概述 1. SVN 简介 Subversion 版本控制系统 简称 SVN. SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯. SVN ...
- Docker概述和安装部署
概述 Docker产生的背景 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后 ...
- DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...
吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1 数字签名服务器v2.1.1 安装部署手册 (VSTK接口 COM版) V2.1.1 长 春 吉 大 正 元 信 息 技 术 ...
- Airflow安装部署
Airflow安装部署 新闻信息是通过爬虫获取,使用scrapy框架进行爬虫任务:使用airflow工作流监控平台对爬虫任务进行管理.监控(可使用CeleryExecutor分布式,也可使用Local ...
- logicaldoc 6.5 结合postgresql 9.x安装部署—基于windows平台
2019独角兽企业重金招聘Python工程师标准>>> 湘中朱生 2012年9月于深圳 说明:原创内容,请勿转载! <1> 从官网下载部署包 官方网站提供源码包和集成 ...
- Centos6.0 64位MySQL 5.5.20 CMake 安装部署
Centos6.0 64位下 MySQL 5.5.20 CMake 安装部署 一.下载所需软件 linux用 wget 下载需要的软件,保存到目录 /usr/local/src 下 wget ftp: ...
- 【原创 HadoopSpark 动手实践 1】Hadoop2.7.3 安装部署实践
目录: 第一部分:操作系统准备工作: 1. 安装部署CentOS7.3 1611 2. CentOS7软件安装(net-tools, wget, vim等) 3. 更新CentOS7的Yum源,更新软 ...
最新文章
- Python之两个列表一起打乱
- 数组子数组求最大值1
- Java 网关-Servlet Gateway
- 解决mysql不能远程登入的问题
- 17 SD配置-企业结构-分配-分配允许的信用控制范围给公司码
- Andorid AlertDialog 点击后自动消失_为何孙悟空成佛后,金箍儿就会自动消失?金箍儿究竟代表什么...
- lamp整合三连发(1)
- Python3,区区几行代码,turtle替我实现了我多年的绘画梦。
- 什么是 360 评估?
- [ 树形DP ] BZOJ4987
- 没有人能随随便便成功,但没有必要活得像尘埃一样卑微
- 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
- 【独家】微软中国开始挖人,看中搜索人才
- Windows删除文件夹提示“文件夹被某一程序占用”,删除失败
- 计算机二级报名时间表天津内容,天津市2018年上半年计算机二级报名通知
- 如何通过Oracle官网下载jdk历史版本
- 温故知新——五大常用算法总结
- NE 和 KE 堆栈脚本解析
- ROS开发实践-QT工具箱
- 几种数字传感器介绍(一)————温湿度传感器(HDC1080)
热门文章
- 姚前:算法经济与算法监管
- (转)NYU教授给写AI新闻的记者们写了一封推心置腹的信,你也应该读读
- 由争议拼多多之货找人想到的 BlockChain Storage 之5、区块链存储 - 存储供需的智能匹配...
- 小身材大能耐,面向物联网开发的 ACRN Hypervisor开源啦!
- 【路径规划】基于matalb穷举法机器人栅格地图避障路径规划【含Matlab源码 1675期】
- 毕设题目:Matlab瑕疵检测
- 【优化算法】天牛须搜索优化粒子群算法【含Matlab源码 1256期】
- 【表盘识别】基于matlab Hough变换指针式仪表识别(倾斜矫正)【含Matlab源码 1058期】
- 【图像增强】基于matlab PSO寻优ACE算法图像增强【含Matlab源码 088期】
- mysql 回滚_【133期】面试官:你说熟悉MySQL事务,那来谈谈事务的实现原理吧!...