您的位置:首页 > 运维架构 > 反向代理

Linux高级运维(十)-搭建企业中最常用缓存代理服务器Squid , Varnish

2019-07-26 08:41 1041 查看

搭建varnish 缓存代理服务器

需求:

使用Varnish加速后端Web服务,代理服务器可以将远程的Web服务器页面缓存在本地,远程Web服务器对客户端用户是透明的,利用缓存机制提高网站的响应速度,使用varnishadm命令管理缓存页面,使用varnishstat命令查看Varnish状态。

步骤一:构建Web服务器
1装包
[root@web1 ~]# yum -y install httpd

2重启[root@web1 ~]# systemctl start httpd
[root@web1 ~]# setenforce 0
[root@web1 ~]# firewall-cmd --set-default-zone=trusted

[root@web1 ~]# netstat -anptu | grep httpd
tcp 0 0 :::80 ::😗 LISTEN 2813/httpd

[root@web1 ~]# cat /var/www/html/index.html
192.168.2.100

3客户端访问
[root@proxy ~]# firefox http://192.168.2.100
步骤二:部署Varnish缓存服务器(192.168.4.5)
1装包-源码编译安装
[root@proxy ~]# yum -y install gcc readline-devel //安装软件依赖包
[root@proxy ~]# yum -y install ncurses-devel //安装软件依赖包
[root@proxy ~]# yum -y install pcre-devel //安装软件依赖包
[root@proxy ~]# yum -y install
python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm //安装软件依赖包
[root@proxy ~]# useradd -s /sbin/nologin varnish //创建账户
[root@proxy ~]# tar -xf varnish-5.2.1.tar.gz
[root@proxy ~]# cd varnish-5.2.1
[root@proxy varnish-5.2.1]# ./configure
[root@proxy varnish-5.2.1]# make && make install

[root@proxy varnish-5.2.1]# cp etc/example.vcl /usr/local/etc/default.vcl

[root@proxy ~]# vim /usr/local/etc/default.vcl
backend default {
.host = “192.168.2.100”;
.port = “80”;
}
[root@proxy ~]# varnishd -f /usr/local/etc/default.vcl

//varnishd命令的其他选项说明如下:

//varnishd –s malloc,128M 定义varnish使用内存作为缓存,空间为128M

//varnishd –s file,/var/lib/varnish_storage.bin,1G 定义varnish使用文件作为缓存

步骤三
客户端验证访问
[root@client ~]# curl http://192.168.4.5

步骤四

1.查看varnish日志

[root@proxy ~]# varnishlog //varnish日志
[root@proxy ~]# varnishncsa //访问日志

2.更新缓存数据,在后台web服务器更新页面内容后,用户访问代理服务器看到的还是之前的数据,说明缓存中的数据过期了需要更新(默认也会自动更新,但非实时更新)。

[root@proxy ~]# varnishadm
varnish> ban req.url ~ .*
//清空缓存数据,支持正则表达式\

搭建Squid缓存代理服务器

一、代理缓存服务

Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。简单来说,Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。

Squid服务程序具有配置简单、效率高、功能丰富等特点,它能支持HTTP、FTP、SSL等多种协议的数据缓存,可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽。

由于缓存代理服务不但会消耗服务器较多的CPU计算性能、内存以及硬盘等硬件资源,同时还需要较大的网络带宽来保障数据的传输效率,由此会造成较大的网络带宽开销。因此国内很多IDC或CDN服务提供商会将缓存代理节点服务器放置在二三线城市以降低运营成本。

在使用Squid服务程序为用户提供缓存代理服务时,具有正向代理模式和反向代理模式之分。

所谓正向代理模式,是指让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为标准代理模式与透明代理模式。标准正向代理模式是把网站数据缓存到服务器本地,提高数据资源被再次访问时的效率,但是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号信息,否则默认不使用代理服务。而透明正向代理模式的作用与标准正向代理模式基本相同,区别是用户不需要手动指定代理服务器的IP地址与端口号,所以这种代理服务对于用户来讲是相对透明的。

使用Squid服务程序提供正向代理服务的拓扑如图16-1所示。局域网内的主机如果想要访问外网,则必须要通过Squid服务器提供的代理才行,这样当Squid服务器接收到用户的指令后会向外部发出请求,然后将接收到的数据交还给发出指令的那个用户,从而实现了用户的代理上网需求。另外,从拓扑图中也不难看出,企业中的主机要想上网,就必须要经过公司的网关服务器,既然这是一条流量的必经之路,因此企业一般还会把Squid服务程序部署到公司服务器位置,并通过稍后讲到的ACL(访问控制列表)功能对企业内员工进行上网审计及限制。
二、配置Squid服务程序

常用的Squid服务程序配置参数以及作用
参数 作用
http_port 3128 监听的端口号
cache_mem 64M 内存缓冲区的大小
cache_dir ufs /var/spool/squid 2000 16 256 硬盘缓冲区的大小
cache_effective_user squid 设置缓存的有效用户
cache_effective_group squid 设置缓存的有效用户组
dns_nameservers IP地址 一般不设置,而是用服务器默认的DNS地址
cache_access_log /var/log/squid/access.log 访问日志文件的保存路径
cache_log /var/log/squid/cache.log 缓存日志文件的保存路径
visible_hostname linuxprobe.com 设置Squid服务器的名称

正向代理
1、标准正向代理
Squid服务程序软件包在正确安装并启动后,默认就已经可以为用户提供标准正向代理模式服务了,而不再需要单独修改配置文件或者进行其他操作。
2、ACL访问控制
Squid服务程序的ACL是由多个策略规则组成的,它可以根据指定的策略规则来允许或限制访问请求,而且策略规则的匹配顺序与防火墙策略规则一样都是由上至下;在一旦形成匹配之后,则立即执行相应操作并结束匹配过程。
3、透明正向代理
“透明”二字指的是让用户在没有感知的情况下使用代理服务,这样的好处是一方面不需要用户手动配置代理服务器的信息,进而降低了代理服务的使用门槛;另一方面也可以更隐秘地监督员工的上网行为。
在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。
反向代理
反向代理是Squid服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。

1 squid介绍及其简单配置

squid的概念
squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
squid代理的作用
通过缓存的方式为用户提供Web访问加速
对用户的Web访问进行过滤控制

工作流程

当代理服务器中有客户端需要的数据时:
a. 客户端向代理服务器发送数据请求;
b. 代理服务器检查自己的数据缓存;
c. 代理服务器在缓存中找到了用户想要的数据,取出数据;
d. 代理服务器将从缓存中取得的数据返回给客户端。
当代理服务器中没有客户端需要的数据时:
1.
客户端向代理服务器发送数据请求;
代理服务器检查自己的数据缓存;
代理服务器在缓存中没有找到用户想要的数据;
代理服务器向Internet 上的远端服务器发送数据请求;
远端服务器响应,返回相应的数据;
代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中
Squid代理服务器工作在TCP/IP应用层
Squid各种代理的定义
正向代理
标准的代理缓冲服务器
一个标准的代理缓冲服务被用于缓存静态的网页到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指名代理服务器的IP地址和端口号。客户端上网时,每次都把请求发送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发送给客户端浏览器。
透明代理缓冲服务器
透明代理缓冲服务器和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因此不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。
反向代理
反向代理缓冲器
反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发给用户。这种方式通过降低了WEB服务器的请求数从而降低了WEB服务器的负载。
正向代理与反向代理的区别
概念
正向代理:对于原始服务器而言,就是客户端的代言人
反向代理:对于客户端而言,就像是原始服务器
用途
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。
反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
安全性
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

Squid主要组成部分
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid
主配置文件:/etc/squid/squid.conf
监听tcp端口号:3128
默认访问日志文件:/var/log/squid/access.log
squid常用配置选项
/etc/squid/squid.conf
http_port 3128 (还可以只监听一个IP http_port 192.168.0.1:3128)
cache_mem 64MB #缓存占内存大小
maximum_object_size 4096KB #最大缓存块
reply_body_max_size 1024000 allow all #限定下载文件大小
access_log /var/log/squid/access.log #访问日志存放的地方
visible_hostname proxy.test.xom #可见的主机名
cache_dir ufs /var/spool/squid 100 16 256 #ufs:缓存数据的存储格式#/var/spool/squid 缓存目录#100:缓存目录占磁盘空间大小(M)#16:缓存空间一级子目录个数#256:缓存空间二级子目录个数
cache_mgr webmaster@test.com #定义管理员邮箱
http_access deny all #访问控制
squid中的访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。squid访问控制有两个要素:ACL元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。
ACL元素类型
src:源地址(即客户机IP地址)
dst:目标地址(即服务器IP地址)
srcdomain:源名称(即客户机名称)
dstdomain:目标名称(即服务器名称)
time:一天中的时刻和一周内的一天
url_regex:URL规则表达式匹配
urlpath_regex:URL-path规则表达式匹配,略去协议和主机名
proxy_auth:通过外部程序进行用户验证
maxconn:单一IP的最大连接数
ACL格式
为了使用控制功能,必须先设置ACL规则并应用。ACL声明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
注:
acl_element_name 可以是任一个在ACL中定义的名称
任何两个ACL元素不能用相同的名字
每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一ACL元素的值被匹配,则这个ACL元素即被匹配。
并不是所有ACL元素都能使用访问列表中的全部类型
不同的ACL元素写在不同行中,squid将把他们组合在一个列表中
访问条目
我们可以使用许多不同的访问条目。下面是我们常用的几个:
http_access:允许HTTP访问
no_cache:定义对缓存请求的响应。
访问列表的规则由一些类似’allow’或‘deny’的关键字构成,用以允许或拒绝向特定或一组ACL元素提供服务。
1.一个访问列表可以由多条规则组成
2.2如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
3.3一个访问条目中所有元素将用逻辑与运算连接
4.列表中的规则总是遵循由上而下的顺序
5.这些规则按照他们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配就立即结束。

Squid常用命令
1初始化在squid.conf里配置的cache目录
squid -z
如果有错误提示,请检查cache目录的权限,可以更改目录权限
chown -R squid:squid /cache目录

2 对squid.conf排错,即验证squid.conf的语法和配置
squid -k parse
如果在squid.conf中有语法或配置错误,这里会返回提示,若无返回,尝试启动squid

3前台启动squid,并输出启动过程
/usr/local/squid/sbin/squid -N -d1
如果有ready to server reques相关信息,说明squid启动成功
然后ctrl+c ,停止squid,并以后台运行的方式启动它

4 启动squid在后台运行
squid -s
可以使用ps -ax | grep squid 来查看squid进程是否存在

5停止squid
squid -k shutdown

6重新引导修改过的squid.conf
squid -k reconfigure -f /XXX/squid.conf
当squid进行配置更改后,可以使用该命令进行squid配置重载

7把squid添加到系统启动项
vim /etc/rc.local
/usr/local/squid/sbin/squid -s

8 修改cache缓存目录的权限
chown -R squid.squid /cache目录
cache缓存目录根据自己的配置更改,squid用户和组是squid,squid

9修改squid日志目录的权限
chown -R squid.squid 定义的日志文件所在目录
这一步并不是适合每一个使用squid的用户,意为让squid有权限在该目录里进行写操作

10 查看你的日志文档
more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是从原始服务器获取并返回给访问用户。

拓展
Squid命中率分析
/usr/local/squid/bin/squidclient -p 80 mgr:info/usr/local/squid/bin/squidclient -p 80 mgr:5min
可以看到详细的性能情况,其中PORT是你的proxy的端口,5min可以是60min
取得squid运行状态信息:
squidclient -p 80 mgr:info
取得squid内存使用情况:
squidclient -p 80 mgr:mem
取得squid已经缓存的列表:
squidclient -p 80 mgr:bjects. use it carefully,it may crash
取得squid的磁盘使用情况:
squidclient -p 80 mgr:diskd
强制更新某个url:
squidclient -p 80 -m PURGE http://www.xxx.com/xxx.php
定期清理swap.state内无效数据
/path/to/squid/sbin/squid -k rotate -f /path/to/squid/conf_file
vi /etc/crontab0 0 * * * root /usr/local/sbin/squid -k rotate -f /usr/local/etc/squid/squid1.conf
当squid应用运行了一段时间之后,cache_dir对应的swap.state文件就会变得越来越大,里面的无效接口数据越来越多,这可能影响squid的响应时间,因此需要使用squid清理swap.state里面的无效数据,减少swap.state的大小。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: