proxy 提供多种代理模式
正向代理
为本地客户端提供互联网访问,并缓存互联网对象(图片,HTML, CSS 等 "下简称对象"), 加速对互联网访问速度
反向代理
为本地网站提供缓存,减轻本地 web server 静态对象(图片, FLASH, HTML, CSS 等) 处理压力
当前环境
(为了清晰拓扑结构,当前只使用 proxy1, proxy2 作为代理服务器,参见下图拓扑结构)
squid server ( proxy1, 10.1.1.111, proxy2, 10.1.1.112)
客户端 (firefox, 10.1.1.25)
web server (www.163.com)
当前以正向代理为环境,(反向代理同理) 主要讨论在使用 sibling (邻居代理,姊妹代理,同级代理) 工作原理
silbing 原理
当前由大于等于 2 台 squid 服务器组成
每台 squid 能够独立缓存对象, 当某台(proxy2) squid 服务器在请求访问某个对象时候
proxy2 会寻找自身缓存哈希表, 假如当前具备缓存对象,则马上返回缓存对象信息至访问客户 (常见为非第一次访问该对象)
假如 proxy2 自身无法从 hash 表中获得对象信息, 则请求邻居代理 proxy1 (常见为第一次访问该对象)
假如 proxy1 具备当前缓存对象, 则 proxy1 返回对象信息至 proxy2, 再返回到客户中
假如 proxy1 不具备当前缓存对象,则 proxy2 从宿主主机 (当前环境为 www.163.com ) 中获得对象信息,并缓存至 hash 表中
目标.
建立 proxy1, proxy2 代理服务器, 启用 icp 协议,允许 proxy1, proxy2 互相访问对方缓存对象
参见 proxy1, proxy2, 启动信息
参见上图可见,proxy1 (ip 111) proxy2( ip 112 ) 都启用 3128 缓存访问端口, 3130 icp 请求端口, 默认最大缓存时间为 259200/60(秒) = 3 天 最大缓存时间
注: 3128 为客户端 (25, firefox) 访问 squid 服务器端口, 3130 为 squid 服务器之间互相请求对象缓存端口
讨论1
重启 proxy1, proxy2, 当前 squid 中不具备任何缓存
25 firefox 代理指向 proxy2( ip, 112) 并第一次访问 163.com
检验 squid 代理日志信息 (日志量太大,过滤并只提取某一个对象信息,如下图)
proxy1 (access.log)
参考上述 silbing 原理信息
当 proxy2 要获得 31685638.jpg 时
proxy2 利用 icp_query 请求访问 proxy1 服务器
因此, proxy1 服务器日志中记录了该对象查询的信息
由于proxy1, proxy2 第一次访问该对象,因此 proxy1 无法获得该信息,并返回记录至 proxy2
proxy1, proxy2 都具备 UDP_MISS/000 的日志 (10.1.1.112, UDP/MISS/000 icp_query)
最终,31685638.jpg 由 proxy2 进行宿主访问,参见 (TCP_MISS/200)
讨论2
25 firefox 代理指向 proxy2( ip, 112) 并第二次访问 163.com
参见下面日志信息
proxy2 access.log
proxy1 access.log
分析,
当前客户(25, firefox) 请求 proxy2 获得 31685638.jpg 信息
proxy2 因为之前已经在 hash 表中记录 31685638.jpg 信息,并从内存中进行对象返回, 参见 (tcp_mem_hit/200)
讨论3
当前 proxy2 已经具备缓存对象 (参见讨论2)
假设当前有其他客户,访问 proxy1 并请求 获得 31685638.jpg 信息
proxy1 先检测 hash 表, 由于没有缓存, proxy1 会请求 proxy2 31685638.jpg 信息
proxy2 在讨论 2 中已经得到 31685638.jpg 缓存, 因此会回应并返回 31685638.jpg 至 proxy1
proxy1 access.log
proxy2 access.log
参见 proxy2 access.log 信息
10.1.1.111 UDP_HIT/000 ICP_QUERY 请求来之 proxy1 服务器
10.1.1.111 TCP_MEM_HIT/200 对象从 proxy2 服务器中内存获得并返回至 proxy1
参见 proxy1 access.log 信息
10.1.1.25 TCP/MISS/200 信息成功返回,并把对象缓存至 proxy1 中
当再次在 (25 firefox) 访问对象时, 参见 proxy1 access.log
确认对象直接来源于 proxy1 内存中
上述为 squid 服务器利用 silbing 架构, 在两台 squid 间相互复制内存对象原理