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/24 和 10.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
`