一、什么是squid
1、 squid可以做代理也可以做缓存
2、squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O
3、squid即可以做正向代理也可以做反向代理
4、正向代理,squid后面是客户端,客户端上网要通过squid去上;反向代理后面是服务器,服务器返回给用户数据的时候需要走squid
5、正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样子可以节省网络带宽资源,而反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器,主要用于网站架构中
二、搭建squid正向代理
1、安装squid
yum install -y squid
2、查看squid版本及其编译参数使用squid -v命令
[root@chenglinux ~]# squid -v
3、清空默认的配置文件
[root@chenglinux ~]# > /etc/squid/squid.conf
4、将一下模板代码拷贝到squid.conf文件中去
模板代码:
http_port 3128 #正向代理默认的端口是3128 acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 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 SSL_ports port 443 acl Safe_ports port 80 8080 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localnet http_access allow localhost http_access allow all cache_dir aufs /data/cache 1024 16 256 #本地磁盘上的目录,这个目录是需要自己创建,不然无法启动,16是定义的cache目录下的目录数量 cache_mem 128 MB hierarchy_stoplist cgi-bin ? coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload refresh_pattern . 0 20% 4320
退出保存
5、创建缓存目录cache
[root@chenglinux ~]# mkdir -p /data/cache
6、更改权限
[root@chenglinux ~]# chown -R squid /data/cache
7、启动squid
需要注意的是在早期的squid版本中需要初始化一下才可以启动
初始化的命令:squid -z
[root@chenglinux ~]# /etc/init.d/squid start
8、检查一下cache目录下是否有生成目录,默认是16个
[root@chenglinux ~]# ls /data/cache/
9、常用的命令
squid -kcheck:检查配置文件是否有错误
squid -k rec :重新加载配置
service squid restart:重启squid,需要注意的是重启的时候回很慢,可以直接先killall squid然后在重启
10、测试
[root@mysql ~]# curl -x192.168.21.99:3128 www.baidu.com
如果看到一大串的东西,就说明正向代理已经成功
测试缓存
[root@mysql ~]# curl -x192.168.21.99:3128 http://s3.51cto.com/wyfs02/M02/5B/D5/wKiom1UTub-T8AQUAABa6PsQTa4459_middle.jpg -I
看一下两图的区别
第一张图多了MISS
三、设置黑白名单
白名单
要求:允许访问网易126、51cto,其他的拒绝
1、在/etc/squid/squid.conf配置文件中的acl CONNECT method CONNECT下添加一下代码:
acl http proto HTTP
acl good_domain dstdomain .baidu.com .qq.com
http_access allow http good_domain
http_access deny http !good_domain
如图:
退出保存
2、重置squid服务
[root@chenglinux ~]# squid -k rec
3、测试
1)访问126
[root@mysql ~]# curl -x192.168.21.99:3128 http://ww.126.com -I HTTP/1.0 200 OK Date: Tue, 30 Jun 2015 08:45:49 GMT Expires: Tue, 30 Jun 2015 09:45:49 GMT Server: nginx Content-Type: text/html Content-Length: 95122 Last-Modified: Mon, 18 May 2015 07:29:49 GMT Cache-Control: max-age=3600 Accept-Ranges: bytes X-Via: 1.1 zhenjiang167:8109 (Cdn Cache Server V2.0), 1.1 ly17:7 (Cdn Cache Server V2.0) Age: 187 X-Cache: HIT from chenglinux X-Cache-Lookup: HIT from chenglinux:3128 Via: 1.0 chenglinux (squid/3.1.10) Connection: keep-alive
2)访问百度
[root@mysql ~]# curl -x192.168.21.99:3128 http://ww.baidu.com -I HTTP/1.0 403 Forbidden #提示被禁止的 Server: squid/3.1.10 Mime-Version: 1.0 Date: Mon, 29 Jun 2015 17:37:27 GMT Content-Type: text/html Content-Length: 3264 X-Squid-Error: ERR_ACCESS_DENIED 0 Vary: Accept-Language Content-Language: en X-Cache: MISS from chenglinux X-Cache-Lookup: NONE from chenglinux:3128 Via: 1.0 chenglinux (squid/3.1.10) Connection: keep-alive
黑名单
1、要求:不允许访问网易126、51cto,其他的允许
2、 在/etc/squid/squid.conf配置文件中的acl CONNECT method CONNECT下添加一下代码:
acl http proto HTTP
acl bad_domain dstdomain .126.com .51cto.com
http_access deny http bad_domain
http_access allow http !bad_domain #其实把这一样注释掉也可以
检查配置文件
重置配置文件
3、测试
1)访问51CTO
[root@mysql ~]# curl -x192.168.21.99:3128 http://ww.51cto.com -I HTTP/1.0 403 Forbidden #提示决绝 Server: squid/3.1.10 Mime-Version: 1.0 Date: Mon, 29 Jun 2015 17:43:25 GMT Content-Type: text/html Content-Length: 3264 X-Squid-Error: ERR_ACCESS_DENIED 0 Vary: Accept-Language Content-Language: en X-Cache: MISS from chenglinux X-Cache-Lookup: NONE from chenglinux:3128 Via: 1.0 chenglinux (squid/3.1.10) Connection: keep-alive
2)访问jd.comOK
[root@mysql ~]# curl -x192.168.21.99:3128 www.jd.com -I HTTP/1.0 200 OK Server: JDWS Date: Tue, 30 Jun 2015 08:57:43 GMT Content-Type: text/html; charset=gbk Vary: Accept-Encoding Expires: Tue, 30 Jun 2015 08:58:12 GMT Cache-Control: max-age=120 Age: 24 Content-Length: 160864 X-Cache: MISS from chenglinux X-Cache-Lookup: MISS from chenglinux:3128 Via: BJ-M-YZ-NX-80(HIT), http/1.1 WH-CT-1-JCS-105 ( [cRs f ]), 1.0 chenglinux (squid/3.1.10) Connection: keep-alive
IE浏览器设置代理设置,具体如图:
4)在浏览器测试51CTO提示访问被拒绝
四、反向代理
1、修改端口
把之前的http_port 3128修改为:
http_port 80 accel vhost vport
2、在刚才的80端口下面添加一下代码:
cache_peer 123.125.119.147 parent 80 0 originserver name=a #这里是固定的写法,a表示的是代理的一个域名的简写
cache_peer_domain a www.qq.com #上面的IP地址就是这里域名的IP地址
cache_peer 61.135.169.125 parent 80 0 originserver name=b
cache_peer_domain b www.baidu.com
退出保存
配置文件解释:
cache_peer:为配置后端的服务器及IP端口
name:为后面要配置的域名,和cache_peer_domain相对应
3、检查配置文件
[root@chenglinux ~]# squid -kcheck
重置配置文件
[root@chenglinux ~]# squid -k rec
4、在浏览器中测试
需要修改的就是在浏览器中把3128端口要改成80端口
1)访问126.com被拒绝
2)访问baidu
5、如果要代理一台主机上的所有域名,需要写成这样:
cache_peer 192.168.10.111 80 0 originserver
后面也不需要写cache_peer_domain了
笔记有错误的地方还请大神指正,小白会继续修改