一、什么是squid

     1 squid可以做代理也可以做缓存

      2squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O

      3squid即可以做正向代理也可以做反向代理

       4、正向代理,squid后面是客户端,客户端上网要通过squid去上;反向代理后面是服务器,服务器返回给用户数据的时候需要走squid

       5、正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样子可以节省网络带宽资源,而反向代理用来搭建网站静态项(图片、html、流媒体、jscss等)的缓存服务器,主要用于网站架构中

 

二、搭建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/

wKioL1WSgbWja3WTAAD0dguSMsY899.jpg

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 https://s3.51cto.com/wyfs02/M02/5B/D5/wKiom1UTub-T8AQUAABa6PsQTa4459_middle.jpg -I

看一下两图的区别

wKiom1WSgE6ClbKcAAM2C7NGwB0631.jpg

wKiom1WSgFbD0ZUFAAMURzLf7T8597.jpg

第一张图多了MISS

 

三、设置黑白名单

         白名单

        要求:允许访问网易12651cto,其他的拒绝

       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

      如图:

wKioL1WSglazoYTMAART88ag-7Q472.jpg

退出保存

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浏览器设置代理设置,具体如图:

wKioL1WSgu-gEX3ZAAb7Ks_4oL4398.jpg

4)在浏览器测试51CTO提示访问被拒绝

wKioL1WSgy-zDg1VAAIyFujNp0s654.jpg

四、反向代理

    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被拒绝

wKiom1WSgeuQ8aWsAAJgFIMULr0612.jpg

2)访问baidu

wKioL1WSg7rwqMG2AAFMRcMTGlo008.jpg


5、如果要代理一台主机上的所有域名,需要写成这样:

     cache_peer 192.168.10.111 80 0 originserver

     后面也不需要写cache_peer_domain

 


           笔记有错误的地方还请大神指正,小白会继续修改