🔗 Feature: squid.conf 迁移
- 目标:简化 Squid 版本之间的 squid.conf 升级过程。
- 状态:已启动
- 预计完成时间:未知
- 版本:
- 开发者:AmosJeffries
🔗 详细信息
目前,用户在每次升级 Squid 版本时,都需要手动阅读发行说明或在线帮助。例如,从 Squid 2.5 升级到 3.1 跨越多个版本,需要梳理多套详细的发行说明。
从 Squid-3.2 开始,当使用 squid -k parse 命令时,会识别过时的配置指令,并打印出升级说明。或者,如果 Squid 在没有检查配置有效性的情况下运行,也会将这些信息记录到 cache.log 中。
此项目还将附带一个效果,即用有意义的说明取代所有模糊的错误配置消息,说明配置行有什么问题以及如何解决。
🔗 问题
- 有时,旧的单个标签选项已被更复杂的选项取代,这些选项嵌套在另一个设置中。例如,多个 Squid-2.5 的 httpd_* 选项迁移到特定的 http_port 标签下的子选项。
- Squid 开发人员正在不断改进 squid.conf 设置及其背后的系统,因此该系统必须易于更新。
- 最好将其作为内置解析器处理路径来实现。然而,当前的解析器(复数!)以及 configure 的启动/重启/重载/关机流程都需要在内置此功能之前被正确重构。有关该工作的详细信息,请参阅 Features/HotConf。
-
某些选项虽然受支持,但并不通过当前的 ./configure 选项集。需要重构解析器中的 #if-#endif 以提供有关需要重新编译 Squid 以获取该选项的指令。
-
这项工作已经针对指令完成,但尚未针对解析指令的子选项完成(例如,http_port … sslcacert=/foo 仍然被报告为错误配置)。
-
🔗 错误的配置逻辑
用户经常遇到的一个常见错误是,错误的配置被 Squid “接受”,但并未产生预期的效果。如果解析器能够检测到这些情况并发出警告,那将是很好的。
- 在相关协议没有打开任何端口的情况下配置访问列表(例如,禁用 icp_port 并配置了 icp_access)。
- 在单行快速 ACL 上使用 “!all” 令牌(例如 ` access_log /var/log/access.log squid !all `),导致该行永远无法匹配。这在多行访问列表中是一个有用的技巧,但在单行中则不然。
- 在多行访问列表的中间部分使用 allow/deny all。在复杂的配置中,这些并不总是显而易见的。解析器可以在找到这些情况时进行扫描并报告。
-
检测一行正在测试一个永远无法产生匹配的 ACL 的更一般情况。下面的第二行和第三行永远无法匹配。**但是**,第二行可能存在以触发 ACL “something”。
http_access allow foo http_access deny something foo http_access deny foo somethingelse
-
-
一系列 allow 或 deny 行,后面跟着只有 **all** 的相同行。注意:如果 foo 和 bar ACL 具有某些类型(external, auth, ident, dst, srcdomain),则这可能是想要的,但对于大多数类型来说,这将是无用的配置。
http_access deny foo http_access deny bar http_access deny all - delay pool 的 delay_parameters 限制全部设置为-1/-1。
- 配置为默认值的指令。这不是一个主要问题,但值得记录以帮助简化大型配置文件。尤其是在现代 Squid 为每个指令都有默认值的情况下。
🔗 解决方案
已在Squid-3.2中完成的工作
- 过时的指令保存在
cf.data.pre中,类型为 **obsolete**。文档注释被打印出来,作为关于如何处理这些指令(删除或更改)的升级说明。 - 已检测到别名指令。将打印一条弃用消息,指示将配置更改为新名称。
- 已忽略缺少编译组件的指令。将记录一条指示缺少组件或编译要求的消息。
分类: WantedFeature
导航:站点搜索,站点页面,类别,🔼 向上