linux服务篇-Squid服务

37 篇文章 0 订阅

Squid Cache (简称SQUID),是一个流行的自由软件(GNU通用公共许可证)的代理服务器和WEB缓存服务器。SQUID有广泛用途,从作为网页服务器的前置CACHE服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统或其他网络搜索,到通过过滤流量到内网安全,到局域网通过代理上网!

       换而言之:缓存比起点源点更接近请求者的互联网内容。Squid支持缓存多种不同的网络对象,包括那些通过HTTP和FTP访问的人。缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容

Squid特点

       Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等

       换而言之:Squid主要设计用于Unix或者类Unix一类的操作系统

Squid官网

       squid : Optimising Web Delivery

       Squid的源意是:乌贼,所以squid的图标就是乌贼

Squid工作原理

Squid代理服务器工作在TCP/IP的应用层。

当代理服务器中有客户端需要的数据时:

a. 客户端向代理服务器发送数据请求;

b. 代理服务器检查自己的数据缓存;

c. 代理服务器在缓存中找到了用户想要的数据,取出数据;

d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:

1. 客户端向代理服务器发送数据请求;

2. 代理服务器检查自己的数据缓存;

3. 代理服务器在缓存中没有找到用户想要的数据;

4. 代理服务器向Internet 上的远端服务器发送数据请求;

5. 远端服务器响应,返回相应的数据;

6. 代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。

正向代理:代表内部PC向某服务器请求,然后将服务器的响应返回到内部发出请求的设备,这是一个完完全全的客户端代理,客户端需要设置代理(代理内部PC去上网)。

普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;

透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;客户端不用设置,不用任何操作,直接可以出去,客户端没有任何察觉!相对于客户端是透明的。透明代理的提供的功能和正向代理是一致的,但其依赖于默认路由和防火墙的重定向策略,因此更适用于局域网,而不适用于Internet中的客户机

       反向代理:CDN(Content distribution network)内容分发网,向某网站发起请求,不是直接访问了网站,而是访问了这个网站的分发上,squid可以将网站原来的内容分发到squid服务器上,我们访问的时候,直接访问squid服务器得到响应!换而言之,就是代理web服务器响应请求!

是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

Squid缓存方式

每一台Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下才放文件(Squid 把它叫object)。不需要太大的硬盘,足够大的内存!

Squid工作模式和端口

       C/S模式     TCP   3128号端口

       [root@taijitao63 ~]# cat /etc/services | grep squid

squid           3128/tcp        ndl-aas         # squid web proxy

      [root@taijitao63 ~]# lsof -i :3128

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

squid   7235 squid   14u  IPv6  24365      0t0  TCP *:squid (LISTEN)

服务的安装与启动

       [root@taijitao63 ~]#wget http://www.squid-cache.org/Versions/v4/squid-4.16.tar.gz

[root@taijitao63 ~]# tar -zxvf squid-4.16.tar.gz

[root@taijitao63 ~]# cd squid-4.16

[root@taijitao63 squid-4.16]# ./configure --prefix=/usr/local/squid     //安装目录

--sysconfdir=/etc/                              //单独将配置文件修改到/etc目录下

--enable-arp-acl                      //可在ACL中设置通过MAC地址进行管理,防止IP欺骗

--enable-linux-netfilter                        //使用内核过滤

--enable-linux-tproxy                           //支持透明模式

--enable-async-io=100                           //异步I/O,提升储存性能,值可修改

--enable-err-language="Simplify_Chinese"        //错误信息的显示语言

--enable-underscore                             //允许URL中有下划线

--enable-poll                                   //使用Poll()模式,提升性能

--enable-gnuregex                               //使用GNU正则表达式

    [root@taijitao63 squid-4.16]# make all   #耗时20min

     [root@taijitao63 squid-4.16]# make install

[root@taijitao63 squid-4.16]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ //创建链接文件,优化路径

[root@taijitao63 squid-4.16]# find . -name *.service

./tools/systemd/squid.service

[root@taijitao63 squid-4.16]# cp ./tools/systemd/squid.service /usr/lib/systemd/system/

[root@taijitao63 squid-4.16]# systemctl daemon-reload

[root@taijitao63 squid-4.16]# systemctl list-unit-files |grep squid

squid.service                              disabled      

[root@taijitao63 squid-4.16]# systemctl status squid

[root@taijitao63 squid-4.16]# systemctl enable squid

[root@taijitao63 squid-4.16]# systemctl start squid

[root@taijitao63 squid-4.16]# systemctl status squid

[root@taijitao63 squid-4.16]# useradd -M -s /sbin/nologin squid             //创建程序用户、组

[root@taijitao63 squid-4.16]# chown -R squid:squid /usr/local/squid/var/

配置文件

/etc/squid.conf   #核心配置文件

/etc/mime.conf   #可以支持缓存的格式

[root@taijitao63 ~]# vim /etc/squid.conf

#定义格式:acl <自定义的 acl 名称> <要控制的 acl 类型> <设定的内容>

acl manager proto cache_object      #定义Manager为管理功能,代表了经典的缓存对象(proto,原)

acl localhost src 127.0.0.1/32 ::1     #定义localhost表示  源地址为127.0.0.1的设备,表示从本机来的

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 #定义to_localhost 表示目的地址为……,到哪儿去的

acl localnet src 10.0.0.0/8     # RFC1918 possible internal network #定义的私有网络

acl localnet src 172.16.0.0/12  # RFC1918 possible internal network

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

acl localnet src fc00::/7       # RFC 4193 local private network range

acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machine

acl SSL_ports port 443

acl Safe_ports port 80          # http

acl Safe_ports port 21          # ftp

acl Safe_ports port 443         # https

acl Safe_ports port 70          # gopher

acl Safe_ports port 210         # wais

acl Safe_ports port 1025-65535  # unregistered ports

acl Safe_ports port 280         # http-mgmt

acl Safe_ports port 488         # gss-http

acl Safe_ports port 591         # filemaker

acl Safe_ports port 777         # multiling http

acl CONNECT method CONNECT  # 用于通过HTTP代理来封装某种请求的方法

http_access allow manager localhost #允许localhost和manager定义的acl访问

http_access deny manager                    #拒绝manager定义的acl访问

http_access deny !Safe_ports                #拒绝非安全端口

http_access deny CONNECT !SSL_ports #拒绝非安全的ssl_ports端口

http_access allow localnet                  #放行定义的localnet

http_access allow localhost                 #放心localhost

http_access deny all                            #拒绝所有,由此可以看出,是从上往下匹配的

http_port 3128                               #预设端口,可以改为加密端口 https_port 923的方式

hierarchy_stoplist cgi-bin ?              #用来强制某些特定的对象不被缓存,主要是处于安全的目的。

#cache_dir ufs /var/spool/squid 100 16 256      #100M的缓存,16个一级目录,256个二级目录

coredump_dir /var/spool/squid                           #cache目录位置

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

cache_effective_user squid         //用来设置初始化、运行时缓存的账号,否则启动不成功

cache_effective_group squid        //默认为指定账号的基本组

access_log /var/log/squid/access.log squid        #定义日志存放记录

配置正向代理

       搭建sqid代理服务器,是内网主机192.168.2.2,能够通过squid服务器加速上网

实验环境

       taijitao63 双网卡 eth0 192.168.1.63     eth1 192.168.2.1 vmnet3

       taijitao64 eth0 192.168.2.2 vmnet3 网关 192.168.2.1

       根据上图拓扑,配置网络环境

修改配置文件

       [root@taijitao63 ~]# vim /etc/squid/squid.conf

16 acl localdomain src 192.168.1.0/24           #16行左右,添加此行

58 http_access allow localdomain                   #58行左右,添加此行

cache_effective_user squid         //用来设置初始化、运行时缓存的账号,否则启动不成功

cache_effective_group squid        //默认为指定账号的基本组

       [root@taijitao63 ~]# systemctl restart squid                            //重启服务

[root@localhost ~]# squid -k parse                    //检查语法是否正确

[root@localhost ~]# squid -z                          //初始化缓存目录

[root@localhost ~]# netstat -anpt | grep squid       //确认squid服务处于正常监听状态

tcp        0      0 :::3128            :::*               LISTEN      40936/(squid-1)

客户端测试

       [root@taijitao64 ~]# firefox &

       Edit(编辑)→→Preferences(首选项)→→Advanced(高级)→→Network(网络)→→Setting(设置)→→Manual Proxy Configure(手动配置代理)→→OK(确定)

       然后打开新浪首页测试

       http://www.sina.com.cn

修改方式二

       将我们下面两行添加的注释或删除

16 acl localdomain src 192.168.1.0/24           #16行左右,删除此行

58 http_access allow localdomain                   #58行左右,删除此行

       然后将

61 http_access deny all

       改为

61 http_access allow all

可以达到相同的效果

配置透明代理加速

       客户端在浏览器中不指定代理服务器的IP地址和端口号,就可以直接访问公网上的服务器

       其实,透明代理相当于Squid和iptables的结合,需要使用iptables通过nat的方式让内部上网,然后通过squid将我们访问的web缓存,下次访问速度就会明显加快,拓扑图遵循正向代理的拓扑配置,只是在配置上有所区别!

理解

透明代理加速,其实是客户端首先可直接上网,也就是通过iptables可以上网,然后使用squid进行加速,这样当我们首次访问较慢的时候,第二次就有较快的响应!

当使用NAT服务器连接Internet时,假设我们使用的Internet的协议为80,也就是www服务,那么通过iptables配置让这个工作由proxy来工作,这样达到代理服务器的功能,这样就是透明代理,在客户端并不需要配置任何相关选项就可以直接加速上网呢

一遍同时的说明:使用者通过NAT主机联网的出去时,只要让NAT服务器发现你是用www服务出去的,那么那就把你这个动作由proxy主机帮你搞定,如此一来,你在浏览器上的配置不需要,但是这个代理的动作是使用了iptables上网了,使用squid加速了!

修改配置文件

       [root@taijitao63 ~]# vim /etc/squid/squid.conf

http_port 3128 transparent          #在原先的基础上,加上透明这个单词transparent

       [root@taijitao63 ~]# service squid restart

配置iptables

       [root@taijitao63 ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1         #地址转发开启

       [root@taijitao63 ~]# sysctl -p

[root@taijitao63 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63

              //SNAT代理内部上网,将内部的地址全部转化为可以上网的地址 192.168.1.63

[root@taijitao63 ~]# iptables -t nat -A PREROUTING -s 192.168.2.0/24 -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

       //端口转化,来自192.168.2.0,从eth1且端口为80的数据进行数据重定向到3128,代理服务器为你工作

客户端测试

       Edit(编辑)→→Preferences(首选项)→→Advanced(高级)→→Network(网络)→→Setting(设置)NO Proxy(无代理)→→OK(确定)

       使用curl获取网页,time跟踪时间

       [root@taijitao64 ~]# time curl www.sina.com.cn

……

real    0m5.890s

user       0m0.008s

sys 0m0.036s

       [root@taijitao64 ~]# time curl www.sina.com.cn

……

real       0m0.120s

user       0m0.000s

sys 0m0.011s

配置反向代理加速

       通过配置反向代理,提高内部服务器的访问速度

       反向代理:CDN=网宿,蓝汛等

       反向代理的特点:内存够大,硬盘不需要太大,因为数据都是使用内存及时响应的

       我们目前taijitao64上,也就是2.2的IP上有两个网站,我们希望通过配置Squid加速对这两个网站的访问,两个网站使用的端口分别为80,81,只加速动态页面或者视频文件,同时我们访问的IP是我们对外的ip63

修改配置文件

       [root@taijitao63 ~]# vim /etc/squid/squid.conf

http_access allow all               #修改此行,允许所有

http_port 3128 vhost                #打开对虚拟主机的支持

cache_peer 192.168.2.2 parent 80 0 no-query originserver weight=1 name=a    #no-query和originserver指明了服务器,不查询直接到源服务器

cache_peer 192.168.2.2 parent 81 0 no-query originserver weight=1 name=b #name对前面的定义做了一个别名

cache_peer_domain a www.servera.com         #访问www.servera.com将直接按照上面的定义访问到2.2的80端口

cache_peer_domain b www.serverb.com

cache_peer_access a allow all           #放行

cache_peer_access b allow all

       [root@taijitao63 ~]# service squid restart

配置虚拟主机

       [root@taijitao64 ~]# mkdir /var/www/html/bbs

       [root@taijitao64 ~]# echo servera > /var/www/html/bbs/index.html

[root@taijitao64 ~]# echo serverb > /var/www/html/index.html

[root@taijitao64 ~]# vim /etc/httpd/conf/httpd.conf

Listen 80

Listen 81           #这行添加

……

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host.example.com

    DocumentRoot /var/www/html/bbs          #修改

    ServerName www.servera.com                  #修改

……

</VirtualHost>

<VirtualHost *:81>                                          #修改

    ServerAdmin webmaster@dummy-host.example.com

    DocumentRoot /var/www/html                  #修改

    ServerName www.serverb.com                  #修改

……

</VirtualHost>

[root@taijitao64 ~]# service httpd restart

配置测试

Hosts文件添加:

192.168.1.63        www.servera.com

192.168.1.63        www.serverb.com

我们vhost监控端口是3128,所以我们这里访问要跟上端口

这样我们的代理了我们的内部服务器对外提供服务,而却还隐藏了内部服务器

拓展:查看是否缓存命中

       每个代理的方式,我们查询的可能给不相同

正向代理命中查询

       火狐有丰富的插件,可以利用插件查看缓存是否命中,比如说firebug这个插件,安装好这个插件之后激活此插件

HIT表示命中,MISS表示没有命中,因为正向代理的时候,不能使用curl命令来获得标头,那么我们使用插件

透明代理命中查询

透明代理命中与否,可以使用命令查看

       [root@taijitao64 ~]# curl -I www.sina.com.cn

HTTP/1.0 200 OK

Content-Type: text/html

Vary: Accept-Encoding

X-Powered-By: schi_v1.02

Server: nginx

Date: Sat, 24 Oct 2015 07:51:47 GMT

Last-Modified: Sat, 24 Oct 2015 07:48:38 GMT

Expires: Sat, 24 Oct 2015 07:52:47 GMT

Cache-Control: max-age=60

Content-Length: 512331

X-Cache: HIT from ctc.gz.1cf2.39.spool.sina.com.cn

Age: 27

X-Cache: HIT from taijitao63

X-Cache-Lookup: HIT from taijitao63:3128

Via: 1.0 taijitao63 (squid/3.1.10)

Connection: keep-alive

反向代理命中查询

       IE11支持查询,可以按F12查询

拓展:几个常见选项

http_port 3128                                                       #默认端口(修改即可)

cache_mem 64MB                                       #缓存占内存大小,额外提供给squid使用的内存

maximum_object_size 4096KB              #最大缓存块

reply_body_max_size  1024000 allow all    #限定下载文件大小

access_log /var/log/squid/access.log         #访问日志存放的文件

visible_hostname  proxy.test.xom              #可见的主机名

cache_mgr  webmaster@test.com            #定义管理员邮箱

http_access deny all                                        #访问控制

maximum_object_size_in_memory 4096 KB   //设置squid内存缓存最大文件,超过4M的文件不保存到内存

cache_dir ufs /var/spool/squid 100 16 256   //定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh        //log文件日志格式

access_log /var/log/squid/access.log combined  //log文件存放路径和日志格式

cache_log /var/log/squid/cache.log   //设置缓存日志

logfile_rotate 60   //log轮循 60天

cache_swap_high 95  //cache目录使用量大于95%时,开始清理旧的cache

cache_swap_low 90   //cache目录清理到90%时停止。

acl localnet src 192.168.1.0/24  //定义本地网段

http_access allow localnet  //允许本地网段使用

http_access deny all  //拒绝所有

visible_hostname squid.david.dev  //主机名

cache_mgr mchina_tang@qq.com  //管理员邮箱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值