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 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Nginx+keepalived双机热备(主从模式)

负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。 ...

4869
来自专栏iKcamp

iKcamp|基于Koa2搭建Node.js实战(含视频)☞ HTTP请求

POST/GET请求——常见请求方式处理 ?? iKcamp 制作团队 原创作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校对:李益、大力...

35814
来自专栏编程微刊

微信小程序云开发数据库操作一添加记录

微信小程序云开发 初学者入门教程二-前端操作数据库模块:https://www.jianshu.com/p/fb5be2e7f507中有写到对数据库的一些简单的...

1224
来自专栏PHP在线

FastCgi与PHP-fpm之间的关系

刚开始对这个问题我也挺纠结的,看了《HTTP权威指南》后,感觉清晰了不少。 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的...

3636
来自专栏IT米粉

学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展...

3945
来自专栏决胜机器学习

Redis专题(三) ——Redis事务与过期时间(缓存分析)

Redis专题(三)——Redis事务与过期时间(缓存分析) (原创内容,转载请注明来源,谢谢) 一、事务(Transaction) 1、概述 事务的定义和...

4137
来自专栏PhpZendo

Jerry Qu 博客 Nginx 配置之性能篇

在介绍完我博客(imququ.com)的 Nginx 配置中与安全有关的一些配置后,这篇文章继续介绍与性能有关的一些配置。WEB 性能优化是一个系统工程,涵盖很...

582
来自专栏枕边书

Linux“体检”指标

前言 在“求佛保佑服务器不宕机”、“杀程序员祭天”的环境下,程序员每天可谓是战战兢兢,接到电话和短信都吓得瑟瑟发抖,为了我们的安全,及时发现服务器运行问题已不仅...

1926
来自专栏狂码一生

PHP $_SERVER大全详解

$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言  $_SERVER['REMOTE_ADDR'] //当前用户 IP 。  $_...

34512
来自专栏网络

RIP实操

【今日文章分享】 实验一:RIPv1基本配置 1、实验目的 通过本实验可以掌握: (1)在路由器上启动RIPv1路由进程 (2)激活参与路由协议的接口,使之可发...

1935

扫码关注云+社区