Squid 简介

本小节來源

Squid 是一个高性能的代理缓存服务器,Squid 支持 HTTP、HTTPS、FTP 等协议。和一般的代理缓存软件不同,Squid 用一个单独的、非模块化的、I/O 驱动的进程来处理所有的客户端请求。它通过缓存与重用经常请求的网页,减少带宽的使用同时提升了响应时间。Squid 具有可扩展的访问控制功能,同时可以使服务器加速。

主要功能

  • 缓存网站内容,以达到分担源站压力加快访问速度的目的。
    • 热点缓存,只缓存访问热度到达设定级别的网站内容。
    • 合并回源,多个相同的请求只回源一次。
  • ACL 访问控制,可针对源IP、目的地IP、域名、URL、访问时间、单一最大连接数限制访问行为。或通过外部程序验证访问者(proxy_auth)。
  • 主要支持协议:HTTP、HTTPS、FTP
  • 网页内容篡改,可根据需求篡改网站内容。
  • 网站头部篡改,可根据需求篡改请求头部。
  • 可针对不同的域名或 URL 配置不同的缓存规则。

应用场景

  • 正向代理(本地网关)
    • 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
    • 正向代理还可以使用缓存特性减少网络使用率。
    • 正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
  • 透明代理(CDN,架设于网络运营商主干机房)
    • 提高各个地区访问者的访问速度。
    • 减少源站压力。
    • 减少网络运营商的网间结算费用。
    • 节省网络运营商带宽资源。
  • 反向代理(网站前端)
    • 降低源站服务器的负载。
    • 隐藏源站真实 IP 地址。

Squid 的配置

squid 配置文件为 /etc/squid/squid.conf

常用配置选项

🍎 绑定端口

设置 Squid 绑定的代理端口。你可以将 Squid 绑定到多个端口,使用多个 http_port 行。默认情况下,Squid 绑定到 3128 端口。

如果 squid 做为客户端正向代理,通常只需指定端口号。

http_port 3128
http_port 3129

如果 squid 在服务端用做 反向代理,为后端服务器加速,则必须使用加速模式,即 Accelerator 模式:

http_port 3128 accel defaultsite=somedomain.com no-vhost

🍎 访问控制列表

ACL 访问控制列表,谁可以访问这个代理,默认只有 localhost。

先用 acl 指令来定义一个访问列表,格式为 acl <aclname> src *******,然后在 http_access 指令中引用。

acl ip_acl src 192.168.1.0/24
acl ip_acl src 10.0.0.0/8
http_access allow ip_acl
http_access deny all

此处把 192.168.1.0/2410.0.0.0/8 这两个子网都定义为 ip_acl 这个访问列表。

指定管理员邮箱

cache_mgr squid.admin@example.com

退出延迟时间

当 squid 服务被要求退出时,需要等待多长时间才会停止。

shutdown_lifetime 10 seconds

🍎 内存缓存数量

squid 可以使用多少内存来保存对象。squid 的总内存量会超过该限制。

cache_mem 64 MB

主机名

可以指定在状态信息及错误信息中显示的主机名。

visible_hostname hollyshit

🍎 指定转发地址

  • cache_peer : 如果要把 squid 连接到后端的代理服务器上,而不是直接连到互联网,必须使用该选项。
  • login : 如果后端的代理服务器需要认证,使用该选项。
  • never_direct : 缓存永远不会去直接访问互联网以抓取页面,如果使用了上面的选项之一,必须使用该选项。
cache_peer 10.1.1.100 parent 8080 0 no-query default login=user:password
never_direct allow all

缓存对象大小限制

缓存对象的大小不允许超过该限制。默认为 4 MB。

maximum_object_size 10 MB

🍎 缓存目录

设定缓存目录,所有的缓存文件都会保存在这里。

格式:

cache_dir <storage type> <directory> <size in MB> 16 256

如,企业内部做为正向代理使用:

cache_dir diskd /cache0 200000 16 256

指定了缓存目录之后,启动 squid 之前,必须为该目录设置正确的权限。另外,还需要用 squid -zN 初始化缓存目录,其中 -z 用于创建丢失的交换目录,-N 表示非 daemon 模式。

启动 squid

启动前,对配置文件进行检验:

$ sudo squid -k check

初始化缓存目录:

bash $ sudo squid -z `