web缓存的工作机制
缓存网页对象,减少重复请求
squid 主要提供缓存加速、应用层过滤控制的功能。
代替客户机问网站请求数据,从而可以隐藏用户的真实Ip地址。
将获得的网页数据(静态Web元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。
代理服务器的概念
代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。
缓存代理对于Web至关重要,尤其对于大型高负载Web站点。Nginx缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。
作用
资源获取:代替客户端实现从原始服务器的资源获取;
加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用;
缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;
隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。
Squid、Varinsh和Nginx区别
Nginx本来是反向代理/web服务器,用了插件可以做做这个副业但是本身不支持特性挺多,只能缓存静态文件;
从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成;
varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术;在内存的利用上,Varnisht比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的;
squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境;
varnish只支持反向代理,功能少缓存容量较小,CPU/IO/内存消耗高,进程意外退出会丢失缓存数据
squid既能支持正向代理,也能支持反向代理缓存数据也能支持持久化,模式多
Squid 代理的类型
传统代理:适用于Internet正向代理,需在客户机指定代理服务器的地址和端口。
透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
使用squid搭建代理服务器
修改 Squid 的配置文件
Squid 的运行控制
创建 Squid 服务脚本
构建传统代理服务器
配置环境
构建透明代理服务器
配置环境
Squid服务器:双网卡,内网ens33:192.168.239.30 外网ens37:12.0.0.1
Web 服务器:12.0.0.12
客户机:192.168.239.100
1.添加网卡
虚拟机设置–>网络适配器–>添加–>网络适配器–>确定–>确定
cd /etc/sysconfig/network-scripts/
ifconfig #查看网卡名
cp ifcfg-ens33 ifcfg-ens37
vim ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.239.2
#DNS1=8.8.8.8
vim ifcfg-ens37
#注释网关及dns
#GATEWAY=192.168.239.2
#DNS1=8.8.8.8
systemctl restart network
Squid服务器配置
Web服务器配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#修改IP地址注释网关及dns
systemctl restart network
yum install -y httpd
systemctl start httpd
ACL访问控制
在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:
使用 acl 配置项定义需要控制的条件
通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制
定义访问控制列表
格式:
acl 列表名称 列表类型 列表内容 …
vim /etc/squid.conf
…
acl localhost src 192.168.239.30/32 #源地址为 192.168.239.30
acl myhost src 192.168.239.100/32 #客户机ip或网段
acl destinationhost dst 192.168.239.20/32 #目标地址为 192.168.239.20
acl MC20 maxconn 20 #最大并发连接 20
acl PORT port 21 #目标端口 21
acl DMBLOCK dstdomain .qq.com #目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule:// #以 rtsp://、emule:// 开头的目标 URL地址,-i表示忽略大小写
acl PURL urlpath_regex -i .mp3$ .mp4$ .rmvb$ #以 .mp3、.mp4、.rmvb 结尾的目标 URL 路径
acl WORKTIME time MTWHF 08:30-17:30 #时间为周一至周五 8:30~17:30,“MTWHF”为每个星期的英文首字母
#启动对象列表管理
vim /usr/local/squid/host.txt
192.168.239.0/24
vim /etc/squid.conf
…
acl myhost “/usr/local/squid/host.txt” #调用指定文件中的列表内容
…
http_access deny(或allow) myhost #注意,如果是拒绝列表,需要放在http_access allow all前面
service squid restart
反向代理
如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用
工作机制
缓存网页对象,减少重复请求
将互联网请求轮训或按权重分配到内网Web服务器
代理用户请求,避免用户直接访问Web服务器,提高安全