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

简介:

一 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,如需转载请自行联系原作者

相关文章
|
1天前
|
缓存 JavaScript 前端开发
|
2天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
|
2天前
|
Java
并发编程之线程池的底层原理的详细解析
并发编程之线程池的底层原理的详细解析
11 0
|
2天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
7 0
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
|
2天前
|
前端开发 JavaScript 编译器
深入解析JavaScript中的异步编程:Promises与async/await的使用与原理
【4月更文挑战第22天】本文深入解析JavaScript异步编程,重点讨论Promises和async/await。Promises用于管理异步操作,有pending、fulfilled和rejected三种状态。通过.then()和.catch()处理结果,但可能导致回调地狱。async/await是ES2017的语法糖,使异步编程更直观,类似同步代码,通过事件循环和微任务队列实现。两者各有优势,适用于不同场景,能有效提升代码可读性和维护性。
|
存储 弹性计算 网络协议
阿里云服务器经济型e、通用算力型u1与c7/g7/r7/c8y/g8y/r8y实例区别及选择参考
在阿里云目前的各个活动中,除了轻量应用服务器之外,活动内的云服务器实例规格主要以经济型e、通用算力型u1、计算型c7/c8y、通用型g7/g8y、内存型r7/r8y这几个实例规格为主,c7/c8y属于计算型实例,g7/g8y属于通用型实例,c7/r8y属于内存型实例,c7/g7/r7属于最新第七代云服务器实例,c8y/g8y/r8y属于倚天云服务器实例,不同的云服务器实例规格在性能、特点及适用场景上有所不同,本文大家介绍一下阿里云服务器经济型e、通用算力型u1与c7/g7/r7/c8y/g8y/r8y的区别,以供参考。
阿里云服务器经济型e、通用算力型u1与c7/g7/r7/c8y/g8y/r8y实例区别及选择参考
|
6天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
6天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
7天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
7天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。

推荐镜像

更多