squid 简单入门

好久没写点什么了,正好最近在看些缓存和http协议方面的东西,就把这些东西给总结下,省的过段时间自己又忘记了干过什么。squid这个我不好评价,对它没有任何使用经验,也看不懂他的代码,就用squid对自己的博客做个简单的代理来开始对它的学习过程。

一:安装

1 为了能快速的把程序运行起来,我一般都喜欢直接yum安装。玩一个软件,重要的是这个软件,安装过程我认为是次要的,毕竟碰到问题,善用搜索总是可以找到答案的。直接使用官方提供的yum源,如下:

官方参考资料: http://wiki.squid-cache.org/SquidFaq/BinaryPackages#KnowledgeBase.2BAC8-CentOS.Squid-3.4

加入官方的yum仓库:
cat  /etc/yum.repos.d/squid.repo
[squid]
name=Squid repo for CentOS Linux 6 - $basearch
#IL mirror
baseurl=http://www1.ngtech.co.il/rpm/centos/6/$basearch/beta
failovermethod=priority
enabled=1
gpgcheck=0

2 直接yum安装squid

yum install squid

3 设置缓存目录权限,建立缓存系统

chown -R squid:squid /var/spool/squid
squid -z

二: 配置

1 对我的博客做个简单的反向代理

注意:
    配置文件里peiqiang.net的源站实际在我本机,没有使用本博客的真实IP地址。

a 删除默认的配置文件,改写如下:

vim squid.conf

#设置用户和用户组
cache_effective_user squid
cache_effective_group squid
#设置主机名
visible_hostname puppet.domain.com
#监听80端口
http_port 80 accel vhost vport
#对我的博客peiqiang.net做反向代理
cache_peer 10.209.65.207 parent 4000 0 originserver name=webserver1
cache_peer_domain webserver1 peiqiang.net
#ACL访问控制
acl all src 0.0.0.0/0.0.0.0
http_access allow all
acl Purge method PURGE
http_access allow all Purge
#设置访问日志和缓存日志、缓存记录日志
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#设置管理员邮箱
cache_mgr sias_peiqiang@foxmail.com
#设置缓存目录相关
cache_dir ufs /var/spool/squid 100 16 256
#能缓存的最大对象为10M
maximum_object_size 10240 KB
#内存中缓存的最大对象 512KB
maximum_object_size_in_memory 512 KB
#squid 用于缓存的内存量
cache_mem 128 MB

b 检查配置文件是否正确,确认没有错误,开始测试

squid –k parse

c 测试,下面来做一个实验,如下可以看到:  

1.第一次访问http://peiqiang.net/index.html时,由于squid还没有缓存,因此是cache miss  
2.cache miss后squid把请求的页面做了缓存,因此第二次是cache hit  
3.紧接着就是PURGE cache,这个时候cache已经被删除了  
4.因此第三次再访问时是cache miss  
5.同理由于第三次访问时已经做了缓存,因此再访问就是cache hit,命中缓存

[root@puppet squid]# curl --head "http://peiqiang.net/index.html"
HTTP/1.1 200 OK
ETag: 32a114-5085-5384529a
Content-Type: text/html
Content-Length: 20613
Last-Modified: Tue, 27 May 2014 08:53:46 GMT
Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
Date: Tue, 27 May 2014 09:38:59 GMT
X-Cache: MISS from puppet.domain.com
X-Cache-Lookup: MISS from puppet.domain.com:80
Via: 1.1 puppet.domain.com (squid/3.4.0.3)
Connection: keep-alive

[root@puppet squid]# curl --head "http://peiqiang.net/index.html"
HTTP/1.1 200 OK
ETag: 32a114-5085-5384529a
Content-Type: text/html
Content-Length: 20613
Last-Modified: Tue, 27 May 2014 08:53:46 GMT
Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
Date: Tue, 27 May 2014 09:38:59 GMT
Age: 4
X-Cache: HIT from puppet.domain.com
X-Cache-Lookup: HIT from puppet.domain.com:80
Via: 1.1 puppet.domain.com (squid/3.4.0.3)
Connection: keep-alive

[root@puppet squid]# squidclient -p 80  -m PURGE "http://peiqiang.net/index.html"
Sending HTTP request ... done.
HTTP/1.1 200 OK
Server: squid/3.4.0.3
Mime-Version: 1.0
Date: Tue, 27 May 2014 09:39:06 GMT
Content-Length: 0
X-Cache: MISS from puppet.domain.com
X-Cache-Lookup: NONE from puppet.domain.com:80
Via: 1.1 puppet.domain.com (squid/3.4.0.3)
Connection: close

[root@puppet squid]# curl --head "http://peiqiang.net/index.html"
HTTP/1.1 200 OK
ETag: 32a114-5085-5384529a
Content-Type: text/html
Content-Length: 20613
Last-Modified: Tue, 27 May 2014 08:53:46 GMT
Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
Date: Tue, 27 May 2014 09:39:11 GMT
X-Cache: MISS from puppet.domain.com
X-Cache-Lookup: MISS from puppet.domain.com:80
Via: 1.1 puppet.domain.com (squid/3.4.0.3)
Connection: keep-alive

[root@puppet squid]# curl --head "http://peiqiang.net/index.html"
HTTP/1.1 200 OK
ETag: 32a114-5085-5384529a
Content-Type: text/html
Content-Length: 20613
Last-Modified: Tue, 27 May 2014 08:53:46 GMT
Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-02-24)
Date: Tue, 27 May 2014 09:39:11 GMT
Age: 9
X-Cache: HIT from puppet.domain.com
X-Cache-Lookup: HIT from puppet.domain.com:80
Via: 1.1 puppet.domain.com (squid/3.4.0.3)
Connection: keep-alive

[root@puppet squid]#

d 常用系统维护命令

检测系统运行的状态:
squidclient -h HOST -p PORT mgr:info
清除squid的cache:
squidclient -h HOST -p PORT -m PURGE URL

2 再试一下正向代理

自语:
    正向代理,我没怎么用过。与反向代理区别是服务器在客户这边,客户机访问某个资源需要先经过squid,然后squid再去访问那个资源并把取得的数据返回给客户机。squid的正向代理配置比较简单,如下:

cat squid.conf

#设置用户和用户组
cache_effective_user squid
cache_effective_group squid
#设置主机名
visible_hostname puppet.domain.com
#监听3128端口
http_port 3128
#ACL访问控制
acl all src 0.0.0.0/0.0.0.0
http_access allow all
acl Purge method PURGE
http_access allow all Purge
#设置访问日志和缓存日志、缓存记录日志
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#设置管理员邮箱
cache_mgr sias_peiqiang@foxmail.com
#设置缓存目录相关
cache_dir ufs /var/spool/squid 100 16 256
#能缓存的最大对象为10M
maximum_object_size 10240 KB
#内存中缓存的最大对象 512KB
maximum_object_size_in_memory 512 KB
#squid 用于缓存的内存量
cache_mem 128 MB

a 配置后了,测试下看看:

curl -xlocalhost:3128  http://www.baidu.com/

如果有一堆的输出,仔细看下那个是百度首页的源码,就说明配置成功,没问题了;同理,客户机需要更改本机的浏览器代理设置才可以使用使用配置的squid正常浏览网页,具体细节就不多说了。

结束语:

    通过上面可以了解squid的一个简单的反向代理过程和清除cache的方法,其余的需求可以根据实际再添加,具体的技术细节等我研究下《Squid Proxy Server 3.1- Beginner’s Guide》再总结下。

参考资料:

1.IBM的文档:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/

2.阿铭:http://study.lishiming.net/chapter22.html

3.官方文档:http://www.squid-cache.org/Doc/

4.中文squid权威指南:http://home.arcor.de/pangj/squid/