Squid 外部 ACL 缓存:为什么辅助程序并非每次都被调用
围绕持久进程、决策缓存键以及明确的授权新鲜度要求,设计 Squid 外部 ACL 辅助程序。
辅助程序记录一次请求后陷入沉默,可能是正常现象。Squid 可能使用缓存的外部 ACL 结果来评估规则,而不再向辅助程序发送查询。
先定义可复用的决策。“该账户能否使用代理?”与“该账户能否访问此目标?”所需的输入不同。扩展外部 ACL 格式构成缓存键。如果辅助程序按用户名和目标做出判断,但缓存键只包含用户名,缓存中的批准可能会被应用得比预期更广。应包含所有会改变答案的输入,同时避免那些只会把等价决策切碎的细节。
接下来选择新鲜度。正值的 ttl 和 negative_ttl 控制匹配与不匹配的结果;grace 可在条目过期前启动刷新。需要确定被撤销账户的缓存批准可以影响后续决策多长时间。这些设置都不会为已建立的 CONNECT 隧道按每个字节或内部 HTTPS 请求重新授权。如果辅助程序执行流量配额,已允许的传输可能在余额变化后继续。
辅助程序是持久的协议参与者,不一定每个请求都启动新的脚本进程。让它随时准备接收连续的查询行,并及时发出每个应答。把诊断信息放到另一通道。启用并发时,返回相应的随附通道标识符。
最后,定义缓慢、不可用和内部错误的结果,并让外围 ACL 顺序产生这些结果。当可复用答案的具体程度与允许的时效都符合访问要求时,设计即告完成。