前言
Squid是一个Web缓存代理,支持处理HTTP,FTP,GOPHER,SSL和WAIS等协议,它通过缓存域重用经常请求的Web页面,减少带宽使用的同时提升响应时间。
也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器并向这个页面发出请求。然后,Squid将获取到的页面数据返回到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
官站:http://www.squid-cache.org/
主要功能
缓存网站内容,以达到分担源站压力加快访问速度的目的。
- 热点缓存,只缓存访问热度到达设定级别的网站内容。
- 合并回源,多个相同的请求只回源一次。
ACL访问控制,可针对源IP、目的地IP、域名、URL、访问时间、单一最大连接数限制访问行为。或通过外部程序验证访问者(proxy_auth)。
主要支持协议:HTTP、HTTPS、FTP
网页内容篡改,可根据需求篡改网站内容。
网站头部篡改,可根据需求篡改请求头部。
可针对不同的域名或url配置不同的缓存规则。
应用场景
- 正向代理(本地网关)
- 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
- 正向代理还可以使用缓存特性减少网络使用率。
- 正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
- 透明代理(cdn,架设于网络运营商主干机房)
- 提高各个地区访问者的访问速度。
- 减少源站压力。
- 减少网络运营商的网间结算费用。
- 节省网络运营商带宽资源。
- 反向代理(网站前端)
- 降低源站服务器的负载。
- 隐藏源站真实ip。
更新系统
更新系统源和软件包
1 | apt-get update && apt-get upgrade |
安装服务
Debian安装
1 | apt install squid -y |
Centos安装
1 | yum install squid -y |
服务配置
安装完成后需要修改配置文件,文件默认路径:/etc/squid/squid.conf
,查看原始配置
1 | grep -v "^#" /etc/squid/squid.conf |grep -v "^$" |
可以将原文件备份,去掉注释和空行后输出到配置文件中
1 | mv /etc/squid/squid.conf /etc/squid/squid.conf.bak |
端口及https协议
注释http端口,配置https,直接使用http也行,证书自动注册可以参考acme.sh申请免费证书,本人是复用了caddy申请的证书。
1 | # http_port 3128 |
吐槽:squid3.x和squid4.x配置有个微小的修改,3.x中直接配置cert=xxx.crt key=xxx.key
,squid4就变成tls-cert=xxx.tls-crt key=xxx.key
了,怎么都喜欢不向下兼容呢。
用户认证配置
生成密码文件,htpasswd在apache里面,也可以不安装,用工具在线生成,将结果写入文件就行。
1 | apt-get install apache2-utils |
username
替换成想要的用户名,如果要多个用户则运行多次该命令。
修改/etc/squid/squid.conf
,在http_access deny all
之前添加用户认证配置。
1 | auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd |
auth_param basic program
:指定密码文件和用来验证密码的程序,验证程序basic_ncsa_auth
的路径在不同32和64位系统中路径是不同的,可以使用命令来检测
1 | # Debian |
auth_param basic children
:鉴权进程的数量,即最多同时在线用户数
auth_param basic realm
:输入用户名和密码时用户看到的提示信息
auth_param basic credentialsttl
:用户名的缓存时间,即同一个用户多久会调用一次basic_ncsa_auth
auth_param basic casesensitive
:用户名是否匹配大小写
acl ncsa_users proxy_auth REQUIRED
:定义一条名为ncsa_users的用户组,所有鉴权成功的用户都归入ncsa_users组
http_access allow ncsa_users
:允许ncsa_users用户组使用代理
用户行为限制
限制用户最高下载10m的文件,且mp3、exe、zip、rar、apk、mp4、msi
等文件不能下载。
1 | reply_body_max_size 10 MB |
禁止多线程流量
1 | acl rangeget req_header Range .* |
隐藏客户端IP
1 | request_header_access Via deny all |
测试是否隐藏客户端IP(不显示客户端IP即成功)测试地址
启动服务
1 | #重启服务 |
在使用过程中,发现运行时间一长squid需要重启才能正常运行,也懒得去找原因,就配置了每日重启
运行命令
1 | crontal -e |
写入计划任务
1 | 0 0 * * * /usr/bin/systemctl restart squid |
重启cron
1 | systemctl restart cron |
参考配置
1 | # |