首页 > 代码库 > 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 服务应用