squid代理服务器原理解析和反向代理实例部署

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

一 squid简介

squid是一个支持http、https、ftp等服务的web缓存代理软件,通过缓存页面实现降低宽带占用提高页面响应时间。另外,squid提供访问控制,squid的缓存页面存放在内存和硬盘中,在选择服务器时候内存和硬盘要求高,对于数据过期更新,需要不定期的清理缓存的数据。


二 squid 代码请求流程

1 客户端访问squid代理服务器

2 代理服务器代表客户端访问后端真实服务器

3 真实服务器把数据返回给squid代理服务器

4 代理服务器把响应数据发送给客户端,并把页面缓存在本地的内存及磁盘中

5 客户端再次请求相同数据时,代理服务器直接将缓存的数据返回给客户端


三 squid代理服务类型

一般分三种类型,正向代理服务器、透明代理服务器、反向代理服务器。

正向代理:主要应用于内部网络访问外部网络时缓存页面数据,提供统一网络接口链接到外网,所有的内网客户端无需配置外网ip即可通过squid上网,在这种模式下,squid主要负责提供缓存加速及访问控制的功能。代理结构如下图

wKioL1iW0uLyBfPzAAGOxk5_Pdc909.png

透明代理:与正向代理类似,不需要终端用户进行特殊设置,需要结合网关部署,所有操作均由管理员在网关服务器和代理服务器进行设置,这些对于用户透明的。代理结构如下图

wKioL1iW14-ykUUIAAGYNHhFoYE983.png

反向代理:反向代理结合智能DNS可以实现基本的CDN框架,此时的squid代理服务器可以直接代表后端真实服务器提供页面访问,用户并感觉不到自己是在访问代理服务器,有利于减轻真实服务器压力,提高并发和响应速度。

wKioL1iW3zKCpJxeAAFr72v5o-I165.png

四 配置文件解析

使用yum安装squid时,默认的配置文件是/etc/squid/squid.conf. 下表给出详细解读

配置选项               具体描述
http_port 设置监听的网络端口,默认是3128
cache_dir

设置缓存位置及大小,可以使用多个cache_dir设置多个存储位置

cache_dir ufs /home/data/squid/cache 100 16 256

100代表百兆存储容量,16及256代表子目录个数

access_log 设置日志路径和格式,access_log /var/log/squid/access.log combined
acl 定义控制访问列表对象,可以控制原地址端口时间
http_access

访问控制,允许使用acl定义localnat

http_access allow localnat

visible_hostname 设置主机名,默认squid将默认检测主机名
cache_peer

用来设置可以连接的其他代理服务器

格式:cache_peer hostname type http-port icp-port[option]

hostname为其他代理机器的主机名或ip

type类型可为parent sibling multicast

http_port指定端口号

icp-port指定ICP端口号

option选项可选值如下:

 proxy-only实现不缓存邻居的任何响应

 weight=n设置服务器权重

 ttl=n此值对广播邻居有效

 rounf-robin设置轮询

 max-conn=n设置链接邻居cache的并发量

 originserver设置邻居为源真是服务器,做反向代理使用


五 实例squid反向代理

squid一般缓存静态页面,网页、图片、歌曲,默认不缓存CGI脚本。

服务器名称 网络配置
squid.test.com eth0:10.10.10.10
eth1:192.168.1.2
web1.test.com eth0:192.168.1.3
web2.test.com eth0:192.168.1.4

1 代理服务器squid设置
首先配置网络环境

网卡eth0

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=10.10.10.10

NETMASK=255.0.0.0

ONBOOT=yes

TYPE=Ethernet

网卡eth1

vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=static

IPADDR=192.168.1.2

NETMASK=255.255.255.0

ONBOOT=yes

TYPE=Ethernet

执行 service network restart

安装squid代理服务并修改配置文件

yum install -y squid

vim /etc/squid/squid.conf

acl manager proto cache_object    #定义缓存管理ACL

acl localhost src 127.0.0.1/32 ::1    #定义源地址为本地回环地址的ACL

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1    #定义目标地址的ACL

acl localnet src 10.0.0.0/8    #定义源地址为10.0.0.0/8的ACL

acl localnet src 172.16.0.0/12    #定义源地址ACL

acl localnet src 192.168.0.0/16

acl localnet src fc00::/7

acl localnet src fe80::/10

acl SSL_ports port 443        #定义安全端口为443的ACL

acl Safe_ports port 80        #定义安全端口为80的ACL

acl Safe_ports port 21        #定义安全端口为21的ACL

acl Safe_ports port 443

acl Safe_ports port 70

acl Safe_ports port 210

acl Safe_ports port 1025-65535

acl Safe_ports port 280

acl Safe_ports port 488

acl Safe_ports port 591

acl Safe_ports port 777

acl CONNECT method  CONNECT        #定义连接方式为CONNECT的ACL

http_access allow manager localhost        #仅允许本机主机进行缓存管理

http_access deny manager                    #拒绝其他主机的所有缓存管理

#拒绝所有非Safe_ports的链接

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access allow localhost

http_access allow all

visible_hostname squid.test.com        #设置主机名

cache_mem 2048 MB                            #内存缓存总容量   

maximum_object_size_in_memory 4096KB        #内存缓存单个文件最大4M

maximum_object_size 4096KB                        #磁盘缓存单个文件最大4M

cache_dir ufs /var/spool/squid 800 16 256    #硬盘缓存目录 最大800M 16个一级目录 256个二级目录

error_directory /usr/share/squid/errors/zh-cn    #定义报错文件的存放目录

cache_log /var/log/squid/cache.log                    #缓存日志文件

cahce_mgr admin@test.com                                #管理员邮箱

http_port 80    accel    vhost

http_port 3128

##no-query表示禁止使用ICP对源服务器进行查询

##设置ICP端口为0

##round-robin可以让代理轮询多台源服务器

##weight=n指定源服务器权重

##name用来设置服务器的唯一名称,代理转发数据到相同主机的不同端口非常有用

##originserver模拟本机服务器为源服务器

cache_peer 192.168.1.3 parent 80 0 no-query originserver round-robin name=server1

cache_peer 192.168.1.4 parent 80 0 no-query originserver round-robin name=server1

hierarchy_stoplist cgi-bin ?    #禁止缓存CGI脚本

##refresh_pattern 检查数据是否过期 min max 是最小最大分钟 -i是不区分大小写

##格式:refresh_pattern [-i] regexp min percent max [option]

refresh_pattern ^ftp:        1440        20%    10080

refresh_pattern ^gopher  1440        0%    1440

refresh_pattern -i (/cgi-bin/|\?)    0    0%    0

refresh_pattern .        0        20%    4320


执行service iptables stop

service squid start

chkconfig squid on


2 两台web服务器设置

设置web1网络参数

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.1.3

NETMASK=255.255.255.0

ONBOOT=yes

TYPE=Ethernet

service network restart

service iptables stop

chkconfig iptables off

yum install -y httpd

echo "web1 192.168.1.3" > /var/www/html/index.html

service httpd start

chkconfig httpd on

web2上同样执行上面步骤,注意修改部分参数


3 客户端验证

浏览器访问代理服务器,http://10.10.10.10 多次刷新后会得到轮询的不同网页 

















本文转自super李导51CTO博客,原文链接: http://blog.51cto.com/superleedo/1895100,如需转载请自行联系原作者

相关文章
|
14天前
|
存储 弹性计算 数据挖掘
阿里云服务器ECS经济型e实例与通用算力u1区别、特性优势、使用场景及租赁费用对比
阿里云ECS云服务器的经济型e实例和通用算力型u1实例各有特点。e实例适合个人开发者和小微企业,适用于中小型网站、开发测试和轻量级应用,性价比高。u1实例则更适合中小企业,提供更高的性能和稳定性,适用于企业级应用、数据分析和中小型数据库。同等配置下,u1实例在计算、存储和网络性能上优于e实例。
169 86
|
7天前
|
存储 缓存 资源调度
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别与选择指南
在我们通过阿里云的活动选购云服务器的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文将详细解析阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,帮助用户根据自己的业务需求做出明智的选择。
|
8天前
|
开发框架 缓存 .NET
阿里云轻量应用服务器、经济型e、通用算力型u1实例怎么选?区别及选择参考
在阿里云目前的活动中,价格比较优惠的云服务器有轻量应用服务器2核2G3M带宽68元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,这几个云服务器是用户关注度最高的。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器、经济型e、通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍和对比,以供参考。
|
13天前
|
存储 分布式计算 安全
阿里云服务器经济型、通用算力型、计算型、通用型各主要实例性能、适用场景对比
在阿里云目前的活动中,云服务器实例规格有几大类,分别是轻量应用服务器、经济型e实例、通用算力型u1实例,第七代计算型c7、通用型g7、内存型r7实例,第八代计算型c8i、通用型g8i、内存型r8i实例,倚天云服务器实例计算型c8y、通用型g8y、内存型r8y实例,不同类型的实例规格,性能和适用场景不同,本文将这些热门实例规格的性能和适用场景全部展示出来,以供大家做对比和选择参考,从而选择出适合自己需求的云服务器实例规格。
|
14天前
|
存储 缓存 安全
阿里云服务器通用算力型u1实例怎么样?实例性能与测评结果参考
本文将通过性能评测、适用场景、特点介绍、实测数据分享以及最新活动价格等多个方面,全方位解析这款云服务器实例,以供用户了解和参考。
|
14天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
71 5
|
14天前
|
安全 编译器 Linux
深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例
本文深入解析了利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,通过分析FreeFlow FTP 1.75版本的漏洞,展示了如何通过构造过长的用户名触发缓冲区溢出并调用计算器(`calc.exe`)。文章详细介绍了攻击原理、关键代码组件及其实现步骤,并提出了有效的防范措施,如输入验证、编译器保护和安全编程语言的选择,以保障系统的安全性。环境搭建基于Windows XP SP3和Kali Linux,使用Metasploit Framework进行攻击演示。请注意,此内容仅用于教育和研究目的。
50 4
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
86 2
|
9天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
9天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多