系统版本:CentOS7.X

概念


Squid是一个高性能的代理缓存服务器。可以帮助PC代理去请求页面数据,并缓存到本地。当第二次继续访问时直接将缓存页面返回给PC。

Squid的特点:

  • 通过缓存的方式为用户提供WEB访问以及加速

  • 对用户访问的WEB进行过滤控制

Squid工作有三种方式:正向代理透明代理、反向代理

理解示意图:

Squid(代理服务)_Linux

Squid(代理服务)_Linux_02Squid(代理服务)_Squid_03

Squid(代理服务)_Linux_05

服务端:搭建正向代理服务


一、使用YUM工具安装Squid服务

# yum -y install squid

二、编辑Squid主配置文件,默认为简易配置

# vi /etc/squid/squid.conf                (编辑主配置文件

acl localnet src 192.168.1.0/24             #定义一个ACL,名为localnet,基于源地址为192.168.1.0/24网段

http_access allow localnet                #调用ACL,允许localnet列表中的网段访问代理服务器

http_access deny all                     #拒绝所有

http_port 192.168.1.1:3128                #设置监听端口和地址,默认为3128

coredump_dir /var/spool/squid              #设置高速缓存目录,默认为/var/spool/squid

access_log /var/log/squid/access.log        #日志文件存放位置

三、开启服务

# systemctl start squid             (开启服务

# netstat -lnupt |grep squid              (查看端口


客户端:设置代理服务器


设置步骤:打开IE浏览器-----Internet属性------连接-----局域网设置

Squid(代理服务)_Squid_09


配置完整解析


配置文件路径:/etc/squid/squid.conf

日志文件路径:/var/log/squid


配置说明

一、基本配置

http_port 192.168.1.1:3128                  #设置监听地址和端口,如果只是端口则表示监听所有地址。

visible_hostname ren.com                   #可发现的主机名,给代理服务器设置一个名字。

access_log /var/log/squid/access.log           #访问日志存放位置。

coredump_dir /var/spool/squid            #设置一个内核转存目录,当Squid挂掉的时候,会将内存中的数据写到该目录下,默认为/var/spool/squid。

cache_mgr squiderror@test.com            #设置一个邮箱,当用户使用代理服务器中出现问题,会在错误页面显示一个邮箱地址,用于用户反馈错误。

reply_body_max_size  1024000 allow all       #限制下载文件大小,单位为字节B。


二、优化配置

cache_dir ufs /var/spool/squid  100 16 256     #设置在本地磁盘设置一个缓存目录用于缓存数据。

“ufs”表示缓存数据的存储格式;

“/var/spool/squid”表示设置的缓存目录;

“100”表示缓存目录占磁盘空间大小,单位为MB;

“16”表示缓存数据的一级子目录个数为16个;

“256”表示缓存数据的二级子目录个数为256个。

cache_mem 1024MB                   #缓存占物理内存大小。单位为MB。

cache_swap_low 85                  #缓存占Swap虚拟内存最低大小为85%。

cache_swap_high 95                   #缓存占Swap虚拟内存最高大小为95%。当缓存数据占内存大小到95%时,会自动删除旧数据释放内存空间到百分之85%。

minimum_object_size 0KB               #设置数据对象(页面数据)的最小大小,0表示不限制。

maximum_object_size 4096KB                  #设置数据对象(页面数据)的最大大小,当大于4MB的数据在不会缓存到磁盘。


三、访问控制

1、定义一个ACL

书写格式:acl 列表名 列表类型 内容

常用的ACL列表类型的使用

列表类型

描述

内容

src

基于源IP(客户机IP)

地址,例如:192.168.1.1

网段,例如:192.168.1.0/24

地址范围,例如:192.168.1.1-192.168.1.254

dst

基于目标IP(服务器IP)

地址,例如:1.1.1.1

网段,例如:1.1.1.0/24

地址范围,例如:1.1.1.1-1.1.1.5

port

基于端口

端口,例如:80

srcdomain

基于源域名(客户机的域名)

域名,例如:source.com

dstdomain

基于目标域名(服务器的域名)

域名,例如:www.baidu.com

method

基于HTTP访问请求类型

请求类型,例如:CONNECT

time

指定某个星期的时间

例如:MTWHF 8:30-17:30

M表示周一

T表示周二

W表示周三

H表示周四

F表示周五

maxconm

每个客户机的并发连接数

数字,例如:20

url_regex

要访问的目标资源URL地址

URL正则表达式,例如:^http://

urlpath_regex

要访问的目标资源URL完整路径

URL正则表达式,例如:\.jpg$

acl localnet src 192.168.1.0/24             #定义一个基于源IP的,名为localnet的ACL,网段为192.168.1.0/24。

acl Safe_ports port 80                   #定义一个基于端口的,名为Safe_ports的ACL,端口号为80。

acl Ddomain dstdomain gsgw.com             #定义一个基于目标域名的,名为Domain的ACL,域名为为gsgw.com。

acl CONNECT method CONNECT                #定义一个基于访问请求类型的,名为CONNECT的ACL,请求类型为CONNECT。

acl Time time MTWHF 8:30-17:30          #定义一个基于时间的,名为Time的ACL,指定时间段为周一到周五每天的8:30-17:30。

acl MAX maxconm 20                #定义一个客户机最大连接数,名为MAX的ACL,设置连接数为20。

acl URL url_regex ^https://            #定义一个基于URL地址过滤的,名为URL的ACL,设置URL开头为https://的地址。正则中“^”表示开头,“$”表示结尾。


2、调用ACL

http_access deny all                    #拒绝访问所有

http_access allow localnet                #允许localnet中定义的地址

http_access allow Safe_ports               #允许Safe_port中定义的端口

http_access allow Ddomain                 #允许Ddomain中定义的域名

http_access allow CONNECT                 #允许CONNECT中定义的HTTP访问请求类型

http_access allow Time                   #只有在Time中定义的时间段才能访问

http_access allow MAX               #MAX中定义的客户机最大连接数为20

http_access allow URL               #只允许访问符合URL中定义的路径地址


四、开启透明代理

http_port 192.168.1.0/24:3128 transparent    #设置监听地址和端口,如果只是端口则表示监听所有地址。并支持透明代理。


五、开启反向代理

http_port 192.168.1.1:80 vhost vport      #设置代理服务器监听的端口为80,并开启虚拟主机加速模式。


1、定义后端服务器

#设置后端WEB服务器地址和端口。采用权重调用的方式实现后端WEB服务器的负载均衡。

cache_peer 192.168.1.11 parent 80 0 originserver weight=1 max-conn=30 name=webServer1

cache_peer 192.168.1.12 parent 80 0 originserver weight=1 max-conn=30 name=webServer2

parent后面的0表示ICP端口号,当存在多个Squid服务器时使用。

weight表示设置一个权重值,值高则优先去这台服务器请求。

max-conn表示连接次数。

name表示定义一个别名,用于下方调用。


2、配置域名转发

#调用上面定义的服务器,当客户来代理服务器访问www.a.com时则将请求转发给后端的WEB服务器。

cache_peer_domain webServer1 www.a.com

cache_peer_domain webServer2 www.a.com