目录
- 一、Squid 反向代理
- 1.1工作机制
- 1.2反向代理实验
- 1.3清空iptables规则,关闭防火墙
- 1.4验证
- 二、使用Nginx做反向代理缓存服务器
- 三CDN简介
- 3.1什么是CDN
- 3.1CDN工作原理
一、Squid 反向代理
- 如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
1.1工作机制
- 缓存网页对象,减少重复请求
- 将互联网请求轮训或按权重分配到内网Web服务器
- 代理用户请求,避免用户直接访问Web服务器,提高安全
1.2反向代理实验
vim /etc/squid.conf
......
--60行--修改,插入
http_port 192.168.243.100:80 accel vhost vport
cache_peer 192.168.243.102 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.243.103 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.dddd.com
#表示对www.kgc.com的请求,squid向192.168.80.11和192.168.80.12的80端口发出请求
- http_port 80 accel vhost vport #squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。
- accel :反向代理加速模式
- vhost :支持域名或主机名来表示代理节点
- vport :支持IP和端口来表示代理节点
- parent :代表为父节点,上下关系,非平级关系
- 80 :代理内部web服务器的80端口
- 0 :没有使用icp(电信运营商),表示就一台- squid服务器
- no-query :不做查询操作,直接获取数据
- originserver :指定是源服务器
- round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点
- max_conn :指定最大连接数
- weight : 指定权重
- name :设置别名
1.3清空iptables规则,关闭防火墙
iptables -F
iptables -t nat -F
systemctl stop httpd #防止 httpd 服务使用的 80 端口号和 squid 反向代理配置的监听端口冲突
systemctl restart squid
- 在后端服务器准备号网页
- 客户机准备号域名映射,或者在服务端添加域名解析使域名能够访问
1.4验证
二、使用Nginx做反向代理缓存服务器
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
upstream cache_server{
server 192.168.80.20:80;
server 192.168.80.30:80;
}
server {
listen 80;
server_name www.kgc.com;
location / {
proxy_cache my_cache; #指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义
proxy_cache_valid 200 5m; #为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为5分钟
proxy_cache_key $request_uri; #指定缓存文件的key为请求的URI
add_header Nginx-Cache-Status $upstream_cache_status #把缓存状态设置为头部信息,响应给客户端
proxy_pass http://cache_server; #设置代理转发的后端服务器的协议和地址
}
}
}
●path:强制参数,指定缓存文件的存放路径。
●levels:定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最多256种选择,00-ff)表示,中间用 : 分隔。
proxy_cache_path /data/nginx/cache; 代表所有缓存只有一个目录,比如/data/nginx/cache/d7b6e5978e3f042f52e875005925e51b
proxy_cache_path /data/nginx/cache levels=1:2; 代表缓存是二层目录(有16*256=4096个目录),比如/data/nginx/cache/b/51/d7b6e5978e3f042f52e875005925e51b
●keys_zone:强制参数,定义共享内存区的名称和大小,该共享内存用于保存缓存项目的元数据(所有活动的key和缓存数据相关的信息),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key。
●inactive:删除指定时间内未被访问的缓存文件,默认10分钟。
●max_size:设置了缓存存储的上限,如果不指定,最大会用掉所有磁盘空间。
●use_temp_path:直接把临时文件放在缓存目录中
检验缓存Nginx服务器搭建
对于一些实时性要求非常高的页面或数据来说,就不应该去设置缓存,下面来看看如何配置不缓存的内容
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name cache.lion.club;
#URI 中后缀为 .txt 或 .text 的设置变量值为 "no cache"
if ($request_uri ~ \.(txt|text)$) {
set $cache_name "no cache"
}
location / {
proxy_no_cache $cache_name; #判断该变量是否有值,如果有值则不进行缓存,如果没有值则进行缓存
proxy_cache my_cache; #设置缓存内存
proxy_cache_valid 200 5m; #缓存状态为200的请求,缓存时长为5分钟
proxy_cache_key $request_uri; #缓存文件的key为请求的URI
add_header Nginx-Cache-Status $upstream_cache_status #把缓存状态设置为头部信息,响应给客户端
proxy_pass http://cache_server; #代理转发
}
}
三CDN简介
3.1什么是CDN
CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。
简单的说,CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验
CDN对网络的优化作用主要体现在如下几个方面
- 解决服务器端的“第一公里”问题
- 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
- 减轻了各省的出口带宽压力
- 缓解了骨干网的压力
- 优化了网上热点内容的分布
3.1CDN工作原理
传统访问过程
1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
3.ROOT DNS将域名授权dns记录回应给 LocalDns
4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
5.域名授权dns 查询域名记录后,回应给 LocalDns
6.LocalDns 将得到的域名ip地址,回应给 用户端
7.用户得到域名ip地址后,访问站点服务器
8.站点服务器应答请求,将内容返回给客户端.
CDN访问过程
1.用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
2.LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
3.ROOT DNS将域名授权dns记录回应给 LocalDns
4.LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
5.域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
6.LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
7.智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
8.LocalDns 将得到的域名ip地址,回应给 用户端
9.用户得到域名ip地址后,访问站点服务器
10.CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)