用squid 2.7简单配置网页加速服务器(透明反向代理)

Posted by Smeagol | Posted in linux | Posted on 27-01-2011

Tagged Under : ,

参考资料:
squid权威指南 (这里是2.5版的squid ,虽然是老版本的,但是是中文的,而且写的很好,对于概念的理解很有好处,不过一些配置方法已经了老了,不适用于现在的2.7稳定版了。)

squid配置案例 (这是官方的一些配置资料,是最新版的。但是全是英文的,英文好的朋友可以是直接看这里文档,里面都是一些配置实例。)

下面主要讲一下用squid 2.7 stable 版做透明反向代理,官方称Website Accelerator,这里有一些概念的问题,大家可以查看上面给出的squid权威指南。当squid用做透明反向代理的时候,占用的是服务器的80端口,而真正的web服务器会绑定在127.0.0.1:80 上。这里我用的是apache。之后讲到如何配置它。所以当客户端(浏览器)访问服务器时,先经过squid的缓存,然后再访问web服务器的。当然,如果squid和web服务器不在同一台服务器上,那么上面的127.0.0.1要改成web服务器的ip,而squid只做代理和缓存用。对于客户端来说,访问web服务器时和没有squid的效果是一样的,所以这里的squid是透明的,顾名思义。

具体配置方法:

操作系统:ubuntu server 10.04

安装squid很简单:

sudo apt-get install squid

找到squid的配置文件/etc/squid/squid.conf,大多数的配置都将在这个文件里。
我们先要打开代理端口,找到配置http_port 的地方(注释),插入如下配置:

http_port 192.168.0.252:80 accel defaultsite=127.0.0.1 vhost

192.168.0.252:80要改成你的本机ip
accel  告诉 squid 以web服务器的模式来接收发送过来的请求。
defaultsite=127.0.0.1 告诉squid 如果请求的域名不在代理之列,将发送127.0.0.1作为host header给真正的web服务器。127.0.0.1可改为其他的。如果web服务器上有很多的虚拟主机,那么vhost是被需要的。

接下来我们要告诉squid,哪里可以找到真正的web服务器。找到cache_peer的部分,插入如下配置:

cache_peer 127.0.0.1 parent 80 0 no-query originserver name=a

上面的127.0.0.1要改成真正的web服务器的ip,我这里用的是同一台服务器,所以这里是127.0.0.1 。name=a 这里a是名字,可以自己取,标志这命令的名称用,之后会有访问控制,要用到这里的名字。

下面我们定义访问控制,使上面的这些命令正常的工作。

acl to_localhost dst 127.0.0.1

acl是规则,to_localhost是规则名称,dst为目标地址,127.0.0.1你懂的。
大意为:以127.0.0.1为目标的请求。

再找到配置http_access的地方,插入:

http_access allow to_localhost

意思是允许to_localhost的http访问。

最后找到cache_peer_access的地方,插入如下配置:
cache_peer_access a allow to_localhost
cache_peer_access a deny all
这里的a,就是上面的定义的name=a 。意为:允许to_localhost访问被定义为a的缓存点(cache_peer),to_localhost就是上面的定义的目标为127.0.0.1的请求。经过这样定义,http访问被允许,缓存点(cache_peer)也被允许。

我们可以用同样的方式来定义源地址:
acl localnet src 192.168.0.0/16
http_access allow localnet
这样定义的话只有本地局域网内的机器可以访问squid。
默认的squid.conf已经有很多定义在里面的了,all表示所有地址,src表示源地址。
大家可以根据自己想要的来定义规则。

经过以上配置之后,http请求将经过squid缓存,再访问web服务器。下面讲下apache的配置。这里是以ubuntu为例,其他linux只要找到配置文

件的相应的位置既可:
找到/etc/apache2/ports.conf文件,将:
Listen 80 改为 Listen 127.0.0.1:80
这样apache就只监听回环地址的80端口了,不会和本机ip的80端口冲突。

调试squid的配置,可以不用重启squid,用下面命令:
squid -k parse (查看配置文件语法是否有误)
squid -k reconfigure (重新载入配置文件,即时生效)

好了,配置方法到这里就结束了,大家有什么问题可以在评论里留言。小弟才疏学浅,难免有表达不清的地方,还请大家指正。