中间件之squid

squid了解一下!

squid是什么

squid是一个web代理工具,可以对web请求进行缓存,从而减少访问时间,支持HTTP,HTTPS,FTP等协议, 和squid的功能相似的有polipo, privoxy

什么时候用squid

先看下官网的内容吧 For Content Delivery Providers: distribute your content worldwide. Squid makes it easy for content distributors and streaming media developers to distribute content worldwide. CDN providers can buy cheap PC ha rdware running Squid and deploy in strategic locations around the internet to serve enormous amounts of data cheaply and efficiently.

A large number of companies have deployed servers running Squid in the past in exactly this manner. 其实当我们的业务需要对我们的请求做缓存,这时候先指向squid的地址,squid会根据请求命中,如果缓存没有,则去远程请求,并返回,记录缓存数据 听起来就是我们用的CDN。 从squid官网看,很多cdn的开发逻辑其实和squid非常类似,或者就是squid集群,里面放了用户的资源缓存,和源站哈。这个具体配置的时候你会更明确这些信息。

squid安装

squid由于在对应的yum和apt源里面所以可以直接安装,这里不再赘述

1
[root@vps ~]# yum -y install squid

squid如何配置

可以看参考文档的配置样例https://wiki.squid-cache.org/ConfigExamples 可以发现squid大致分为几个模块配置

Authentication(认证)

支持如下认证方式https://wiki.squid-cache.org/Features/Authentication

  • DB: Uses a SQL database.
  • getpwam: Uses the old-fashioned Unix password file.
  • LDAP: Uses the Lightweight Directory Access Protocol.
  • MSNT: Uses a Windows NT authentication domain.
  • MSNT-multi-domain: Allows login to one of multiple Windows NT domains.
  • NCSA: Uses an NCSA-style username and password file.
  • NIS (or YP): Uses the NIS database
  • PAM: Uses the Unix Pluggable Authentication Modules scheme.
  • POP3: Uses an email server to validate credentials. Useful for single-signon to proxy and email.
  • RADIUS: Uses a RADIUS server for login validation.
  • SASL: Uses SASL libraries.
  • SMB: Uses a SMB server like Windows NT or Samba.
  • SSPI: Windows native authenticator

在认证配置方面,我们使用auth_param配置auth相关的用户名密码等信息 命令格式参考 auth_param scheme parameter [setting] 这里看下官网的建议配置

1
2
3
4
#auth_param basic program <uncomment and complete this line>
#auth_param basic children 5 startup=5 idle=1
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours

编写acl

有了用户密码认证,那就需要添加到规则之上,在squid里面是通过acl控制的,熟悉nginx绘图ftp配置的的同学应该不陌生,这里参考一个官网的配置

1
2
3
4
5
6
acl foo proxy_auth REQUIRED
acl bar proxy_auth lisa sarah frank joe
acl daytime time 08:00-17:00
http_access allow foo daytime
http_access allow bar
http_access deny all

认证具体大家想看可以看文档,具体看我们后面的配置哈

Interception(截断, 可能修改)

了解web前端的大家应该都知道,这个interceptor指的是在发起http之前对请求进行一些自定义的修改,使之满足我们的最终请求,常见的比如增加authorization头等信息 而squid中的interceptin更多的指的是各个系统模式下的配置方式 这里可以看下linux截断相关的配置,其实更多是中继的意思 https://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxDnat 这篇文章不错,介绍了通过iptables做forward的一些内核参数和防火墙处理,通过iptables, 其实可以做到到类似网站的80通过到一台中继服务器继续运行