- web服务器的优化:
工作原理:客户访问动态资源,nginx代理到apache(nginx只有静态资源)。客户访问静态资源,nginx从disk获取被压缩了的静态资源(提高并发),因为图片和视频不能压缩,所以把视频和图片放到squid缓存服务器里,squid的源站是nginx,客户访问图片和视频,找squid服务器,squid向nginx要,下次客户访问同样的图片和视频就直接从squid缓存服务器里拿,不用再向nginx要。
- SQUID工作原理:
SQUID会把缓存的数据放入磁盘中,在磁盘中建立二级目录(分区采用UFS),分别存储object(缓存文件),当然,它会把一些热数据放入缓存
- SQUID工作流程:
cache(缓存)
- SQUID取数据
hash tables:相当与目录,记录每个digest索引信息
digest tables:不同分区对应的object(缓存文件)的大概说明
- 缓存服务器:
Varnish:采用内存分页技术,把所有的数据放入内存中,策略和SQUID完全不同
SQUID:可以给web服务器缓存一些图片视频等。也可以做CDN技术,当地的用户访问当地的缓存服务器。
CDN(内容分发网络):客户访问一个域名,智能DNS给客户一个离他最近的CDN站,CDN站找源站要数据,源站给把数据给CDN站,CND返回给客户端,再有一个客户端访问的话就直接把CND缓存的文件提供给客户端,不需要向源站要数据了。
三个核心点:智能DNS,缓存服务器(SQUID,Varnish,Nginx),资金
Nginx:用cache模块把nginx变成缓存服务器
- 代理服务器基本类型:
1.传统代理:之前的网络,想要上网,必须使用代理服务器;需要明确指定服务端(被淘汰)
内网访问公网,内网浏览器需要添加代理服务器信息
如果是路由器的话,路由器只负责内外网互通,squid有缓存功能以及路由功能,缺点就是,必须要让内网用户指定代理服务器
2.透明代理:采用防火墙方案,将端口转换,让客户端不需要进行任何设置就可以通过squid访问公网,不需要使用路由器
内网访问公网,内网浏览器不需要添加代理服务器信息,而是用防火墙
如果是传统代理,内网用户必须要指定squdi的IP和端口3128,所以透明代理可以用防火墙技术把3128改为80,内网直接输入IP+端口就可以访问了,不需要指定代理服务器
3.反向代理:用于网站前端,就是缓存服务器工作方式
外网访问内网(web),
客户访问squid服务器,squid反向代理内网的web服务器数据返回给公网客户端,下一次公网客户端访问同样的数据时,squid直接返回数据,不需要再和后端的web服务器要数据了
- SQUID软件介绍:
服务名:squid
主程序:/usr/sbin/squid
主配置文件:/usr/local/squid.conf
默认监听端口:TCP 3128号
默认访问日志:/var/log/squid/access.log
- 配置文件介绍:/etc/squid/squid.conf
http port 3128 端口
access_log /var/log/squid/access.log squid 访问日志,访问日志的位置,身份是squid用户存储
cache_mem 64MB 最大能调用64MB的内存存储热数据(经常被访问的数据)
cache_dir ufs /var/spool/squid 100 16 256 把缓存放到目录里如何存储,目录文件系统是ufs,缓存的目录。
100(单个缓存用的最大空间是100MB)16(最多创建16个一级目录)256(最多创建256个二级目录)
visible hostname proxy.benet.com 指定当前自己的主机名
dns testnames squid定期向域名发起请求,如果这两个域名能访问到,那么还在存活
maximum object size 4096KB 限制最大缓存大小(控制下载大小),超过限制不会保存至缓存服务器
reply body max size 10MB 限制访问大小(控制访问大小)
- ACL访问控制列表
acl 列表名称 列表类型 列表内容(acl al src 0.0.0.0/0.0.0.0;http access deny al)先定义acl,然后对acl允许或拒绝(两部分)
列表类型:src源地址 dst目标地址 port目标端口 dstdomain目标域 time访问时间 maxconn最大并发连接
url_regex目标URL地址 (www.baidu.com/1.html 代表1.html不能访问)
Urlpath_regex 整个目标URL路径 (http://www.baidu.com/1.jpeg 代表1.jpeg不能访问)
注意:acl匹配自上而下依次匹配,匹配即停止
如果定义了acl,但是没有对acl允许或拒绝(http access),默认拒绝
如果定义了acl,但是没有对acl允许或拒绝(http access)并且http acces deny all被关闭,那么acl匹配会根据最后一条的 http access进行反向操作
传统代理搭建:
内网通过添加的代理服务器去访问公网,客户端需要配置代理服务器(已经被淘汰,因为客户端不可能都会配)
环境准备:11主机是内网(客户端) 192.168.66.11
12主机即有公网又有内网(squid服务器) 192.168.66.11、20.20.20.12
13主机是公网(web服务器) 20.20.20.13
环境搭建:
11图形化主机:添加网关(让两个不同网段通信)
echo "GATEWAY=192.168.66.12" >> /etc/sysconf......;service network restart;route -n查看
12主机:开启路由转发(内网的数据包要发给公网,不开启就不会传递数据包);修改配置文件
①vim /etc/sysctl.conf
;sysctl -p
注意:这时候12主机访问13接收不到13返回的页面,因为12数据包能到13(公网),但是13的数据包不能返回给12,公网不能找到内网地址(因为公网没法配网关),所以需要snat转换,防火墙技术,之后会学习,现在用squid代理来访问
②vim /etc/squid/squid.conf
开启缓存的东西放在哪个目录下
指定当前服务器的主机名
13主机:下载httpd,并且开启,给网页文件写入123
- 测试结果:
将11主机转换为图形化:init 5
打开火狐浏览器,配置代理服务器,打开首选项--高级--网络--设置
- 验证第二次访问的数据确实是是squid里的缓存
关闭web服务器
还原虚拟机,再次设置代理
不同服务器都需要添加代理服务器信息才能访问到squid下的网页,所以要声明环境变量让elinks也能访问
在客户端打开配置文件/etc/squid/squid.conf:
source /etc/profile
- 测试:
透明代理:客户端不需要任何操作,只添加网关接口(dhcp自动分配)
内网通过防火墙改变的端口直接访问到外网,内网(客户端)不需要设置任何东西,直接就可以访问到外网
- 环境准备:
11主机是客户机,添加网关
12主机是squid,要开启路由转发,设置两个IP,192.168.66.12;20.20.20.12
13主机是后端web,设置公网IP 20.20.20.13,下载apache
- 12主机设置配置文件:
重启服务:service squid reload
启动防火墙:service iptables start ;清除防火墙规则:iptables -F
iptables -t nat -A PREROUTING -i eth0 -s 192.168.66.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128;iptables -t nat -L查看
service iptables save;chkconfig iptables on
- 测试
用户下载限制大小
- 在apache主机写一个大文件
- 在squid主机编辑配置文件
重启服务:service squid reload
- 测试:
反向代理:相当与nginx七层代理
- 环境准备:
11主机是客户机下载apache
12主机安装squid
13和14主机是apache服务器,添加网关
- 13和14启动apache
指定网关(防止网页文件中域名需要解析):
- 12主机编辑配置文件:
指定真实服务器信息
打开缓存目录
公网地址允许访问squid
放行acl
service squid start;chkconfig squid on
- 测试轮询:
![]()
![]()
- 测试缓存:
![]()