Squid 代理服务器详解

Squid简介

Squid是一个支持HTTP,HTTPS,FTP等服务的Web缓存代理软件,它可以通过缓存页面来提高服务器的相应速度并降低带宽占用。并且,Squid还具有强大的访问控制功能。Squid可以运行在各种操作系统平台上。

Squid会将访问页面的结果缓存在硬盘和内存上。所以Squid对硬盘和内存的空间大小具有较高的要求。内存和硬盘越大,缓存的命中率就越高。但是真实服务器数据是实时更新的,因此,我们就需要不定期的清空缓存数据以保证用户访问结果的准确性。

Squid代理服务器原理

Squid原理:客户端访问Squid代理服务器,由代理服务器代表客户访问后端真实服务器,真实服务器将响应的数据返回给Squid代理服务器。最后,Squid代理服务器将响应结果返回给客户端,同时将结果缓存在硬盘上及内存中,当客户端再次访问相同的网页时,代理服务器直接将响应结果返回给客户端。

安装squid服务

RHEL7 系统的安装光盘中自带了Squid的RPM格式的软件包。

[root@cc ~]# yum -y install squid
[root@cc ~]# systemctl restart squid

Squid服务端:

  • 软件包:squid-3.3.8-26.el7.x86_64.rpm
  • 系统服务:squid
  • 主程序:/usr/bin/squid
  • 主配置文件:/etc/squid/squid.conf
  • 默认监听地址:TCP 3128
  • 默认访问日志:/var/log/squid/access.log
  • 默认缓存日志:/var/log/squid/cache.log

常见代理服务器类型

代理服务器有多种类型,一般意义上常分为标准正向代理服务器,透明代理服务器,反向代理服务器。

正向代理服务器主要应用于内部网络希望访问外部网络时缓存页面数据。由于公网IP地址稀缺,企业内部成百上千台计算机不可能同时大欧连接到Internet上,目前的解决方案就是通过一个统一的网络接口连接Internet。Squid就可以提供这样的接口。所有的客户端通过设置代理服务器连接值Squid,通过代理上网。此模型下,Squid主要负责提供缓存加速服务和访问控制的功能。正向代理是对用户的一种操作。

透明代理与传统的正向代理相似,区别在于传统的正向代理需要每个客户端都进行代理服务器的设置。而透明代理通过网关进行部署。即,所有的设置都是由管理员在网关服务器以及代理服务器进行的。因此,透明代理对于用户是透明的,不需要用户进行任何设置。

反向代理结合智能DNS可以实现基本的CDN框架。通过DNS的分离解析功能,可以为不同地区的DNS请求解析不同的结果返回给客户端。用户访问时,感觉不到是在访问代理服务器。由于使用到了缓存技术,当大的并发量到达时,Squid也可以更快的给用户返回响应结果。反向代理结构如下图所示。

配置文件解析

安装好Squid包后,默认的配置文件为/etc/squid/squid.conf。Squid支持功能非常丰富,配置语句也较多。下表给出了Squid主要的配置语句以及相关说明。

反向代理案例

案例需求

通过配置代理服务器,实现以下目标:

  1. 代理服务器可以将远程的Web服务器页面缓存在本地
  2. 代理服务器端口设置为80端口
  3. 用户通过访问代理服务器即可获得远程Web服务器上的页面内容
  4. 远程Web服务器对客户端用户是透明的
  5. 利用缓存机制提高网站的响应速度

方案

使用3台RHEL7虚拟机,其中一台作为Squid代理服务器,该服务器用来连接两个网段,因此需要配置两块网卡,地址分别为192.168.4.5和192.168.2.5。一台作为客户端测试主机,IP地址为192.168.4.100。一台Web服务器,地址为192.168.2.100,该Web服务器为其他代理提供Web数据源,拓扑图如下图所示。

实现步骤

步骤1:在主机192.168.2.100 上构建Web服务器

  • 在Web服务器上安装httpd软件包,并部署主页。
[root@cc ~]# yum -y install httpd-2.4.6-40.el7.x86_64   //安装http软件包
[root@cc ~]# systemctl restart httpd                    //重启httpd系统服务
[root@cc ~]# echo "Welcome to www.cc.com" > /var/www/html/index.html //搭建主页
[root@cc ~]# netstat -antup | grep 80                   //查看80端口是否是http服务监听 
tcp6       0      0 :::80                   :::*                    LISTEN      1438/httpd

步骤2:部署Squid代理服务器

  • 在代理服务器上安装squid软件包
[root@cc ~]# yum -y install  squid.x86_64 7:3.3.8-26.el7  //安装squid软件包
  • 修改squid服务的主配置文件:/etc/squid/squid.conf
  [root@cc ~]# vim /etc/squid/squid.conf
        .....
        http_port 80 vhost                                  //设置反向代理
        visiable_hostname www.cc.com                        //设置主机名
        http_access allow all                               //允许本机所有主机使用代理服务器
        cache_peer 192.168.2.100 parent 80 0 originserver   //定义后台真实服务器信息
        cache_dir ufs /var/spool/squid 100 16 256           //定义硬盘缓存路径,总容量,一级目录个数和二级目录个数
        cache_mem 128 MB                                    //定义内存缓存大小,注意128和MB之间有空格
        .....
  • 启动系统服务,并查看80端口
[root@cc ~]# systemctl restart squid
[root@cc ~]# netstat -antup | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      12441/(squid-1)                           
                                                             //确定80端口为squid服务监听状态

步骤3: 客户端client上测试squid代理服务器结果

  • 通过更改/etc/hosts文件来做域名和IP解析服务
[root@cc ~]# vim /etc/hosts
.....
192.168.4.5 www.cc.com
.....
  • 使用curl浏览器来测试访问结果。使用-I选项测试可以看到头部信息。
[root@cc ~]# curl http://www.cc.com
Welcome to www.cc.com
[root@cc ~]# curl -I http://www.cc.com
HTTP/1.1 200 OK
Date: Tue, 18 Apr 2017 08:27:06 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) PHP/5.4.16
Last-Modified: Thu, 06 Apr 2017 11:31:26 GMT
ETag: "2-54c7dd9765860"
Accept-Ranges: bytes
Content-Length: 2
Content-Type: text/html; charset=UTF-8
Age: 168943
Warning: 113 www.cc.com (squid/3.3.8) This cache hit is still fresh and more than 1 day old
X-Cache: HIT from www.cc.com
X-Cache-Lookup: HIT from www.cc.com:80
Via: 1.1 www.cc.com (squid/3.3.8)
Connection: keep-alive

总结答疑

  1. 修改配置文件时,注意不要改错位置。否则,squid服务无法启动
  2. 启动squid服务时,若配置文件没有错误。但服务仍然无法启动,则查看80端口是否被其他服务占用。
[root@cc ~]# netstat -antup | grep 80

比如80端口被httpd服务占用,则停掉httpd服务。

[root@cc ~]# systemctl stop httpd

相关推荐

Linux云服务器下搭建FTP服务器

腾讯云Ubuntu搭建TinyProxy代理服务器

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

2 条评论
登录 后参与评论

相关文章

来自专栏Java开发

Linux中bond网卡绑定方法

HWADDR对应mac地址 # ifconfig -a 可以查看 UUID对应网卡UUID Linux 查看网卡UUID

571
来自专栏jeremy的技术点滴

尝试docker的overlay网络

3405
来自专栏L宝宝聊IT

Iptables防火墙(SNAT和DNAT)应用示例

1415
来自专栏jeremy的技术点滴

重新理解HTTP中的“持久连接”

3314
来自专栏Netkiller

数据与应用程序间通信·UDP Socket

你是否想过当数据库中发生变化时,将变化内容通知到外面的应用程序。这样做的目的是 方便二次开发,例如你的软件第三方产品,你没有软件的源码,无法二次开发,这是你可以...

3296
来自专栏along的开发之旅

文加图, 理解Http请求与响应

在讲解OkHttp之前, 我们首先来个高清大图, 看下http请求的整个步骤, 有个整体概念.

622
来自专栏散尽浮华

Linux下squid代理缓存服务环境部署

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。 Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并...

20410
来自专栏Python爬虫与数据挖掘

手把手教你如何进行FileZilla的下载和安装

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezil...

861
来自专栏上善若水

002工具及环境之查看当前局域网有那些IP在线

用Arp -a命令,查询MAC数据 除去尾数为255的广播地址,剩下的就是当前电脑的在线列表

473
来自专栏散尽浮华

Tomcat自带的Session共享方案实施记录

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上,从而就找不到...

982

扫码关注云+社区