Squid缓存代理服务
一.squid简介
1.squid是使用最普遍的开源缓存代理服务
2.支持的代理协议: FTP、HTTP、SSL、套接字Socket
3.存储分类:磁盘 -- 分区 --目录(最多二级) --object(缓存文件)
4.索引方式:
Hash Tables 目录 每个digest的索引信息
Digest Tables 索引 不同分区对应的object大概说明
5.应用场景
- web的缓存,提高用户访问速度
- 内网用户的代理,代理内网用户访问互联网
- Squid支持ACL(访问控制列表),控制用户的上网行为
6.优势
在于对大文件的索引、减少访问请求、节省带宽
7.工作原理:
黑色线为请求,红色线为回复
首先客户端访问web服务,请求数据到达Squid代理服务器;
Squid服务器会先查询缓存中有没有缓存页面或资源,如果有直接返回给客户端;
如果没有,就向后端web服务器发送请求,收到回复后先在自己的缓存中存一份,然后再发送给客户端。
二.代理类型
传统模式(正向代理)
标准代理服务器必须在每一个内网主机的浏览器上明确指明代理服务器的IP地址和端口号
透明模式
透明代理服务器不需要指明代理服务器的IP地址和端口号;
squid服务器阻断网卡通信,并且过滤出访问外网的HTTP流量,对于Linux系统来说,透明代理服务器使用iptables或者ipchains实现;其余操作和标准代理服务器相同。
反向代理模式
反向代理服务器位于本地web服务器和internet之间,处理所有对web服务器的请求,阻止web服务器和internet的直接通信,这种方式通过降低向web服务器的请求数降低了web服务器的负载。
反向代理的过程隐藏了真实的服务器。
总结:
传统模式和透明模式下代理服务器和客户端属于一个网络,服务器并不知道自己为谁提供服务;作用都是让内网用户可以通过代理服务器访问互联网资源,提高了访问速度,也可以通过ACL访问控制列表控制内网用户的上网行为。
反向代理模式的过程中隐藏了真实的服务器,对客户端是透明的,客户端并不知道真正提供访问的服务器;可以提高用户的访问速度,起到负载的作用
两者的代理对象不同:
传统模式和透明模式代理的对象是客户端
反向代理模式代理的对象是服务端
各自的应用场景:
传统和透明模式,一般用于内网用户访问互联网,根据需求做缓存和进行访问控制
反向代理,一般用于公司服务器集群做web缓存
三.squid代理软件相关信息
squid服务端
squid #服务名/软件包
/etc/squid/squid.conf #主配置文件
/etc/rc.d/init.d/squid #启动脚本
/usr/sbin/squid #主程序,二进制命令
TCP 3128 #默认监听端口
/var/log/suqid #日志目录
/var/spool/squid #缓存目录
常用参数:
# squid常用参数:
http_port 3128 #指定监听端IP和端口号
access_log /var/log/squid/access.log squid
# 日志文件和用户
cache_mem 64MB # squid本身能够调用的内存资源
cache_dir ufs /var/spool/squid 100 16 256
#缓存目录 文件系统 路径 最大的存储资源 100MB 一级目录的最大个数16 二级目录的最大个数256
visible_hostname proxy.benet.com
# 缓存服务器名称
dns_testnames www.163.com
# 判断自己是否正常(存活)的机制,访问公网网站
maximum_object_size 4096KB
#最大缓存对象的大小;允许缓存量
reply_body_max_size 10MB
# 允许访问的单个文件大小;允许通过量
四.实验部署
传统代理模式
# 内网服务器
# 添加网关地址,指向squid的内网ip:10.10.10.19
echo "GATEWAY=10.10.10.19" >> /etc/sysconfig/network-scripts/ifcfg-eth0
server network restart
# route -n验证
# 网关服务器(squid服务器)
# 配置eth0网卡为10.10.10.19;eth1网卡为20.20.20.19
yum -y install squid #安装软件
# 修改配置文件
http_port 3128 #端口
visible_hostname 019 #缓存服务器名称
# 启动squid
service squid start
# 开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# web服务器配置
# 配置eth0网卡为20.20.20.20
# 编写http测试页面,并启动httpd服务
vim /var/www/html/index.html
this is ceshi ye
service httpd start
验证:
配置客户机的浏览器代理
访问web服务
模拟web服务器宕机,刷新页面,发现永久可以访问到html静态页面。
透明代理模式
# 内网客户机添加默认路由或者修改网关地址为squid的ip
echo "GATEWAY=10.10.10.19" >> /etc/sysconfig/network-scripts/ifcfg-eth0
# squid服务器
# 安装squid服务并修改配置
yum -y install squid
vim /etc/squid/squid.conf
http_port 10.10.10.19:3128 transparent
#网关内网IP
visible_hostname 019
# 重载squid服务
service squid reload
# 开启路由转发
vim /etc/sysctl.conf
et.ipv4.ip_forward = 1
# sysctl -p
# 开启iptables
service iptables start
chkconfig iptables on
# 添加路由规则
iptables -t nat -A PREROUTING -i eth0 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
# web服务器配置
# 配置eth0网卡为20.20.20.20
# 编写http测试页面,并启动httpd服务
vim /var/www/html/index.html
this is ceshi ye
service httpd start
验证:客户机直接访问web服务,不需要设置代理服务器
反向代理模式
# 内网web服务器:
# 添加网关:10.10.10.19
# 编写测试页面并启动httpd服务
# squid服务器
# 安装squid服务
# 编辑配置文件 /etc/squid/squid.conf
http_access allow all
# Squid normally listens to port 3128
http_port 20.20.20.19:80 vhost #squid的外网口地址 虚拟主机
visible_hostname 019
cache_peer 10.10.10.18 parent 80 0 originserver round-robin
cache_peer 10.10.10.20 parent 80 0 originserver round-robin
# 内网中web服务器IP 0代表环境中是否还有其他squid服务器
# round-robin: rr算法(这是默认写法,但squid只有rr算法这一种)
service squid start #启动squid服务
# 开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
外网客户机访问验证:
五.Squid ACL设置
ACL配置
1.ACL配置规则
# ACL(Access Control List):根据源地址、目标URL、文件类型等定义列表
acl <列表名称> <列表类型> <列表内容> ...
#针对已定义的acl列表进行限制
http_access allow(允许) 或deny(拒绝) <acl-name> ...
2.ACL支持过滤的类型
src #源地址
dst #目标地址
port #目标端口
dstdomain #目标域
url_regex #目标URL地址
Urlpath_regex #整个目标URL路径
maxconn #最大并发连接
time #访问时间
3.规则总结:
如果仅仅有acl没有设置http_access默认拒绝
如果http_access deny all 未定义(未启用),并且自己定义了一个acl范围,默认使用最后一条规则的反向规则
acl wangnet src 20.20.20.0/24
http_access allow localnet
http_access allow localhost #最后一条规则
# And finally deny all other access to this proxy
# http_access deny all
# 重新加载squid
service squid reload
客户机访问: