首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Varnish入门

这个寒冷的季节因你的关注而变得温暖

一、构建Varnish反向代理

1、什么是反向代理?

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部 网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外 就表现为一个反向代理服务器。

2、在网络上常见的代理服务器有三种:

a、标准的代理缓冲服务器

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主 机上---即代理服务器(传统代理)

优点:当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里请求数据而不再向原web 站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。

缺点:要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。

b、透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不 需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口) 流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服 务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商) 特别有用。

c、反向代理缓冲服务器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务 器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之 间,处理所有对WEB服务器的请求,阻止了WEB服务器和Internet的直接通信。如果互联网用户请求的页面 在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出 请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服 务器的负载。

3、搭建步骤:

a、关闭防火墙

b、关闭selinux

# yum -y install libtool ncurses-devel pcre-devel libxslt pkgconfig groff python-imaging

# rpm -ivh libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm

# rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm(yum亦可)[root@localhost ~]# rpm -ivh python-docutils-0.6-1.el6.noarch.rpm

# tar -zxvf varnish-4.1.3.tar.gz -C /usr/src/

# cd /usr/src/varnish-4.1.3/

# ./configure --prefix=/usr/local/varnish --enable-debugging-symbols --enable-developer-warnings --enable-dependency-tracking

# make && make install

# ls /usr/local/varnish/

# ln -s /usr/local/varnish/sbin/* /usr/sbin/

# ln -s /usr/local/varnish/bin/* /usr/local/bin/

# cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl

# vim /usr/local/varnish/default.vcl

修改:

backend default { .host = "192.168.1.100"; .port = "80";

}

# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80

# netstat -anpt grep varnish

注意:

停止varnish用下面的命令:

# killall -9 varnishd

4、在WEB服务器

[root@localhost ~]# service httpd restart

[root@localhost ~]# echo "welcome to WEB server" > /var/www/html/index.html

5、综合验证:

a、在varnish代理服务器上

# varnishlog

b、在WEB服务器上

# tail -f /etc/httpd/logs/access_log

c、在client端:

#elinks http://1.1.1.1

二、部署Varnish负载均衡高可用群集

1、部署负载均衡

# vim /usr/local/varnish/default.vcl

修改:

backend web1 {

.host = "192.168.1.100";

.port = "80";}

backend web2 { .host = "192.168.1.200"; .port = "80";

}

import directors; //加载directors模块

sub vcl_init { new bar = directors.round_robin(); bar.add_backend(web1); bar.add_backend(web2);

}sub vcl_recv {

set req.backend_hint = bar.backend();}

# varnishd -C -f /usr/local/varnish/default.vcl//检查语法

# varnishd -f /usr/local/varnish/default.vcl//启动

# netstat -anpt grep varnishd

验证:客户端访问http://1.1.1.1,varnish服务器会根据算法分配流量。

2、在实际应用中,当其中一个节点出现故障,实际上varnish服务器无法访问故障节点,但是varnish服 务器中有缓存页面内容,客户端可以访问到相同的页面内容。无法实现自动切换,我们要求实现无缝转发 流量。

# vim /usr/local/varnish/default.vcl

增加:

backend web1 {

.host = "192.168.1.100"; .port = "80"; .probe = {//开启健康检查

.url = "/";//请求的URL路径 .interval = 5s;//查询间隔时间 .timeout = 1s;//超时时间 .window = 5;//滑动窗口

.threshold = 3;//上次检查.window数量的多少,

}

}

backend web2 { .host = "192.168.1.200"; .port = "80"; .probe = {

.url = "/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3;

}

}

......略(其他保持一样)......

# varnishd -C -f /usr/local/varnish/default.vcl//检查语法

# varnishd -f /usr/local/varnish/default.vcl//启动

# netstat -anpt grep varnishd

验证:客户端访问http://1.1.1.1/,varnish服务器会根据故障实现切换。

IT

超哥

这世界要是没有爱情,它在我们心中还会有什么意义!这就如一盏没有亮光的走马灯。—— 歌德

关注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G0T5OB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券