Squid作为反向代理服务器使用时,其工作原理为:客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
Squid反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要HTTP头标记:
Last-Modified:告诉反向代理页面什么时间被修改
Expires:告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control:告诉反向代理页面是否应该被缓冲
Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache
要配置反向代理服务器,需要在squid的主配置文件里面添加如下内容:
- http_port 80 accel vhost vport
- cache_peer 192.172.1.133 parent 80 0 no-query originserver
- cache_peer_domain www.test.com 192.172.1.133
- acl sites dstdomain www.test.com
- http_access allow sites
- http_access deny all
- cache_dir ufs /var/spool/squid3 100 16 256
- cache_mgr yourmail@somesite.com
- cache_mem 64 MB
- maximum_object_size_in_memory 1028 KB
- access_log /var/log/squid3/access.log squid
上述配置的详细解释如下:
http_port 80 accel vhost vpor:指定Squid所服务的端口为80,vhost和vport指的是所采用的虚拟主机的方式:基于IP地址和基于端口的,详细请参见本书对Apache Web服务器的介绍;
cache_peer 192.172.1.133 parent 80 0 no-query originserver:指定真实Web Server的IP地址;
cache_peer_domain www.test.com 192.172.1.133:告诉反向代理服务器,当客户端有对www.test.com的访问请求时,需要从真实Web Server 192.172.1.133上取得数据;
acl sites dstdomain www.test.com:定义客户端能够通过反向代理服务器访问的主机;
http_access allow sites、http_access deny all:限制客户端通过反向代理服务器能够访问的范围;
cache_dir ufs /var/spool/squid3 100 16 256、cache_mgr yourmail@somesite.com、cache_mem 64 MB、maximum_object_size_in_memory 1028 KB、access_log /var/log/squid3/access.log squid:代理服务器的常规配置,如本章前面几节所述
。