URL 重写器崩溃时 Squid 请求变慢
当代理能够接受连接、但请求在继续转发前停滞时,排查 URL 重写辅助程序。
如果 Squid 能接受连接,但把请求转发出去要花很长时间,请检查这条路径上的任何 URL 重写器。在 Squid 5–7 中,url_rewrite_program 指定一个在初始访问检查之后被调用的外部程序。它可能在请求到达目标之前就造成延迟。
- 查看实际生效的重写命令,包括包装脚本和参数。
- 把受影响的请求与辅助程序诊断对应起来。子进程反复退出、应答格式错误以及队列不断增长,是几种不同的线索。
- 确认是否由某一种 URL 模式触发故障。保留该输入的脱敏样例,而不是去改动无关的解析器设置。
辅助程序遵循按行处理的请求/应答约定。包装脚本写到标准输出的进度文本可能破坏这个约定。以管理员身份成功运行脚本,也不会复现 Squid 的输入流、运行环境或权限。这条路径与密码校验相互独立。
只有在交互正常工作之后,才应把它当作容量问题。url_rewrite_children 控制进程数及相关队列行为,但增加子进程并不能修复由输入触发的崩溃。它的并发选项会引入通道标识,并要求辅助程序实现相应的会话。
在获得授权的情况下做一次不带重写器的对照,可以分离出它的影响。在过载时让它保持被绕过,则可能改变它所执行的转发路径或过滤策略,所以这属于策略选择。在把全部延迟都归因于网络时延之前,先把观测到的辅助程序等待时间与 DNS 以及后续连接证据作对比。