首页 > 代码库 > Linux 之squid 服务应用

Linux 之squid 服务应用

Squid是什么

Squid是比较知名的代理软件,它不仅可以跑在linux上还可以跑在windows以及Unix上,它的技术已经非常成熟。目前使用Squid的用户也是十分广泛的。Squid与Linux下其它的代理软件如Apache、Socks、TIS FWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。


Squid之所以用的很多,是因为它的缓存功能,Squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O. 从经济角度考虑,它是很多网站架构中不可或缺的角色。


Squid不仅可以做正向代理,又可以做反向代理当作为正向代理时,Squid后面是客户端,客户端想上网不管什么网都得经过Squid. 当一个用户(客户端)想要请求一个主页时,它向Squid发出一个申请,要Squid替它请求,然后Squid 连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。使用正向代理时,客户端需要做一些设置,才能实现,也就是平时我们在IE选项中设置的那个代理。反向代理是,Squid后面为某个站点的服务器,客户端请求该站点时,会先把请求发送到Squid上,然后Squid去处理用户的请求动作。阿铭教你一个特别容易的区分:正向代理,Squid后面是客户端,客户端上网要通过Squid去上;反向代理,Squid后面是服务器,服务器返回给用户数据需要走Squid.


也许你会问,什么时候需要配置正向代理,又什么时候配置反向代理呢?阿铭的观点是,正向代理用在企业的办公环境中,员工上网需要通过Squid代理来上网,这样可以节省网络带宽资源。而反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器,它用于网站架构中


示例:正向代理

用户A 想访问 服务器B 要经过N多的网关过去,还有可能这些网关不允许用户A 访问。

此时有一个服务器Z ,可以直接访问服务器B ,不需要经过那些网关。 此时 Z 就是代理服务器。此时的代理是  正向代理。代理的是用户端,而此时服务器B 不知道访问它的是 用户A ,只知道是 Z 访问了它,而不知道Z 后面的是谁。正向代理用户是知道有代理服务器Z 存在的,需要用户手动来设置IE(提高速度,变不可能为可能,)


技术分享


示例:向代理


技术分享

图片中原始资源服务器B 是不可以访问外面的资源的。用户A 想直接访问B也是不行的。因为防火墙限定了。此时在B 服外面做一个反向代理服务器Z ,让Z 来请求数据,这样用户可以通过访问Z来达到访问B 的目的。这就是反向代理。(反向代理服务器Z 是网站提供方给用户的,用户不知道后端还有服务器B)

---------------------------------------------------------------


实例1:搭建squid正向代理

官方网站为 http://www.squid-cache.org/  

yum install -y squid

squid -v  查看版本以及编译参数

> /etc/squid/squid.conf

vim /etc/squid/squid.conf


[root@LNMP ~]# yum install -y squid  #安装 squid


[root@LNMP ~]# vim /etc/squid/squid.conf #打开配置文件,打开缓存文件存放目录


cache_dir ufs /var/spool/squid 100 16 256 #启用缓存存放目录  100M 的大小

cache_mem 128 MB  #如果有这行打开,如果没有手动添加。启用一些内存作为缓存,加快速度


# Add any of your own refresh_pattern entries above these.

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

refresh_pattern \.(jpg|png|js|css|mp3|mp4) 1440 20% 2880 ignore_reload

#添加缓存匹配 ,这一行是手动添加的。保存退出


[root@LNMP squid]# /etc/init.d/squid start  #启动 squid 服务

 #启动服务失败,报错没有设置 “visible_hostname


[root@LNMP squid]# vim /etc/squid/squid.conf

refresh_pattern \.(jpg|png|js|css|mp3|mp4) 1440 20% 2880 ignore_reload

visible_hostname Linux-test #设置 visible_hostname

技术分享

2016/12/08 13:07:19| WARNING cache_mem is larger than total disk cache space!

*这一条用又报 cache_mem 设置过大,cache_mem 设置成了128M ,而缓存目录是 100M,所以这样设置是不合理的,将cache_mem 更改为28M,比缓存目录小。

启动:

[root@LNMP squid]# /etc/init.d/squid start

Starting squid:                                            [  OK  ]


技术分享

[root@LNMP squid]# ls /var/spool/squid/

00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  swap.state

[root@LNMP squid]# netstat -lnp #squid 端口是 3128

tcp        0      0 :::3128                     :::*                        LISTEN      2488/(squid)

http_port 3128 这个代理端口是可以更改的。

--------------------------------------------------

在客户机进行测试设置代理,然后打开网页。网站是可以访问的,但是此时我们不能证实是通过代理来进行上网的。只能在linux 主机上进行抓包测试。

10.72.4.50 port :3128


[root@LNMP ~]# tcpdump -nn port 3128 #如果没有这个命令,yum install -y tcpdump

下图证明代理已经生效  。

技术分享



进入到缓存目录可以查看到访问产生的临进文件技术分享


技术分享


-------------------------------------------------------

访问控制设置(白明单):此时的代理网站可以访问任意的网站,那么就要做一些设置来限制某些网站。



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

acl http proto HTTP  

acl good_domain dstdomain .linux.com .baidu.com  #允许访问的 。dstdomain指定目标domain

http_access allow good_domain

http_access deny !good_domain  # “!”非“good_domain”


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

楼主粗心的过错(小插曲)

[root@LNMP ~]# squid -kcheck  #检查配置文件有没有错

2016/12/08 14:21:14| redreshAddToList: Unknown option ‘\.(jpg|gif|png|js|css|mp3|mp4)‘: ignore_reload

# 排错  “ignore_reload”应该 为 “ignore-reload”

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[root@LNMP ~]# squid -kcheck  #再次检查没有输出,即没有错误

[root@LNMP ~]# squid -kreconfig #重新应用配置文件

在windows客户端上测试

技术分享

技术分享

在别一台linux 客户机上行curl 测试

技术分享

~~~~~~~~~~~~~~~~~~~~~~~~~~~

访问控制设置(黑明单


acl bad_domain dstdomain  .linux.com  .baidu.com  #不允许访问的

http_access deny bad_domain

http_access allow !bad_domain     #非bad_domain


亲测,是被拒绝的。

技术分享

--------------------------------------------------------------

反向代理的设置:


[root@LNMP ~]# vim /etc/squid/squid.conf  #因为作为用户来看访问的是服务器,不知道是代理。

http_port 3128 #更改为 http_port 80  accel vhost vport

cache_peer 180.97.33.108 parent 80 0 originserver name=baidu

cache_peer_domain baidu www.baidu.com




#以www.baidu.com,为例,先ping 出百度的IP 180.97.33.108,指定代理名:oribinserver name=baidu。如果还要代理别的网站,就再写两行,每两行作为一个单元。且一定要知道网站的源IP.


[root@LNMP ~]# squid -kcheck

[root@LNMP ~]# squid -kreconfig


[root@LNMP ~]# netstat -lnp  #端口被nginx 占用

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1206/nginx 


[root@LNMP ~]# /etc/init.d/nginx stop #停掉nginx ,


[root@LNMP ~]# /etc/init.d/squid stop

Stopping squid: ................                           [  OK  ]

[root@LNMP ~]# /etc/init.d/squid start

Starting squid: .                                          [  OK  ]


[root@LNMP ~]# netstat -lnp  #确认squid 在使用80 端口

tcp        0      0 :::80                       :::*                        LISTEN      1589/(squid)


在测试端windows c:\windowns\system32\drivers\etc\hosts 中写入代理的网址

192.168.31.135 www.baidu.com www.qq.com www.sina.com


在linux 客户端的测试


技术分享

在windowns Pc 端中的测试:百度网是可以上去的,QQ无法访问。

技术分享




本文出自 “CBO#Boy_Linux之路” 博客,请务必保留此出处http://20151213start.blog.51cto.com/9472657/1880945

Linux 之squid 服务应用