Squid是比较知名的代理软件,它不仅可以跑在linux上还可以跑在windows以及Unix上,它的技术已经非常成熟。目前使用Squid的用户也是十分广泛的。Squid与Linux下其它的代理软件如Apache、Socks、TISFWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。
Squid之所以用的很多,是因为它的缓存功能,Squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O. 从经济角度考虑,它是很多网站架构中不可或缺的角色。
Squid不仅可以做正向代理,又可以做反向代理。当作为正向代理时,Squid后面是客户端,客户端想上网不管什么网都得经过Squid. 当一个用户(客户端)想要请求一个主页时,它向Squid发出一个申请,要Squid替它请求,然后Squid 连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。使用正向代理时,客户端需要做一些设置,才能实现,也就是平时我们在IE选项中设置的那个代理。而反向代理是,Squid后面为某个站点的服务器,客户端请求该站点时,会先把请求发送到Squid上,然后Squid去处理用户的请求动作。正向代理,Squid后面是客户端,客户端上网要通过Squid去上;反向代理,Squid后面是服务器,服务器返回给用户数据需要走Squid.
1、安装squid。
yum –y install squid #yum源自带版本为3.3.8。
或者在官网上下载稳定版,编译安装(http://www.squid-cache.org)
cd /usr/local/src
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.21.tar.gz
cd squid-3.5.21
./configure --prefix=/usr/local/squid \
--disable-dependency-tracking \
--enable-dlmalloc \
--enable-gnuregex \
--disable-carp \
--enable-async-io=240 \
--with-pthreads \
--enable-storeio=ufs,aufs,diskd,null \
--disable-wccp \
--disable-wccpv2 \
--enable-kill-parent-hack \
--enable-cachemgr-hostname=localhost \
--enable-default-err-language=Simplify_Chinese \
--with-build-environment=POSIX_V6_ILP32_OFFBIG \
--with-maxfd=65535 \
--with-aio \
--disable-poll \
--enable-epoll \
--enable-linux-netfilter \
--enable-large-cache-files \
--disable-ident-lookups \
--enable-default-hostsfile=/etc/hosts \
--with-dl \
--with-large-files \
--enable-removal-policies=heap,lru \
--enable-delay-pools \
--enable-snmp \
--disable-internal-dns
make &&make install
安装完成后,查询版本及安装参数
squid –v
+----------------------------squid命令参数-------------------------------------------+
[root@localhost squid]# squid -h
Usage: squid [-cdhvzCFNRVYX] [-s | -l facility] [-f config-file] [-[au] port] [-k signal]
-a port Specify HTTP port number (default: 3128).
-d level Write debugging to stderr also.
-f file Use given config-file instead of
/etc/squid/squid.conf
-h Print help message.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
Parse configuration file, then send signal to
running copy (except -k parse) and exit.
-s | -l facility
Enable logging to syslog.
-u port Specify ICP port number (default: 3130), disable with 0.
-v Print version.
-z Create missing swap directories and then exit.
-C Do not catch fatal signals.
-D OBSOLETE. Scheduled for removal.
-F Don't serve any requests until store is rebuilt.
-N No daemon mode.
-R Do not set REUSEADDR on port.
-S Double-check swap during rebuild.
-X Force full debugging.
-Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
常用命令的简写:
squid –kche #检测是否有语法错误
squid –krec #重新加载配置文件
+----------------------------squid命令参数-------------------------------------------+
2、修改配置文件
vim /etc/squid/squid.conf
把以下修改
http_port 3128 #缓冲时用的端口号,反射代理时改为80或8080,正常代理,默认为3128,可以自己改动下。
http_access allow all
cache_dir ufs /var/spool/squid 256 16 25 #指定本地磁盘上的缓存目录,后边的1024为大小,单位是M
cache_mem 128 MB #用来规定缓存占用内存的大小,具体也需要根据您机器的内存定
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload
配置文件保存好后,可以检测下是否有语法错误:
squid –kcheck
+----------------------------squid.confs配置-------------------------------------------+
如果只想代理某几个域名,则在squid.conf中找到:
acl CONNECT method CONNECT
在其下面添加四行:
acl http proto HTTP
acl good_domain dstdomain .baidu.com .sina.com #这里的. 表示万能匹配,前面可以是任何字符,这里只填写允许的域名。
http_access allow http good_domain
http_access deny http !good_domai
如果要设置黑名单,同样在squid.conf中找到:
acl CONNECT method CONNECT
在其下面添加四行:
acl http proto HTTP
acl bad_domain dstdomain .sina.com .souhu.com #拒绝的域名名单
http_access allow http !bad_domain
http_access deny http bad_domain
+----------------------------squid.confs配置-------------------------------------------+
注意:/var/spool/squid目录需要使用命令授权:
chown -R squid:squid /var/spool/squid
如果是用yum安装的则在安装时已经完成了此不聚,此处不用处理。
在第一次启动之前或者修改了cache路径之后,需要重新初始化cache目录,如下命令:
squid –z
3、启动服务
systemctl start squid
如果需要开机自动启动:systemctl enable squid
查看squid是否启动:
ps aux |grep squid
查找端口监听情况:
netstat –nat
4、正向代理测试
a)在本机上使用curl命令测试
curl -xlocalhost:3128 http://www.baidu.com/
如果看到了一大串,说明squid正向代理设置ok。
b)浏览器中配置
在windows中:
Internet选项 -> 连接 -> 局域网连接 -> 代理服务器
在macOSX中:
Safari -> 偏好设置 -> 代理 -> Web代理
然后输入你的代理地址和端口,就可以正常工作了。
5、搭建squid反向代理
反向代理只需要在squid.conf配置文件中一个地方改动一下:
http_port 3128
改为:
http_port 80 accel vhost vport
然后再增加要代理的后端真实服务器信息:
cache_peer 123.125.119.147 parent 80 0 originserver name=a
cache_peer 61.135.169.125 parent 80 0 originserver name=b
cache_peer_domain a www.qq.com #以网上的服务器来测试
cache_peer_domain b www.baidu.com #以网上的服务器来测试
其中cache_peer为配置后端的服务器ip以及端口,name后边为要配置的域名,这里和后面的cache_peer_domain相对应。实际的应用中,ip大多为内网ip,而域名也许会有多个,如果是squid要代理一台web上的所有域名,那么就写成这样:
cache_peer 192.168.10.111 80 0 originserver
后面连cache_peer_domain 也省了。
修改了配置文件后需要重启一下squid:
systemctl restart squid