Ubuntu18/Varnish4.x使用IP作为backend.list过滤条件无结果如何解决
问题根因
backend.list的过滤逻辑是匹配输出的完整后端标识字符串,默认执行命令时不会输出后端的IP、端口后缀,只有加上-p参数才会展示后端名(IP:端口)格式的完整标识,你未加-p参数时输出内容没有IP信息,自然无法检索到匹配结果。- 如果你VCL配置中
.host字段填写的是域名而非直接写IP,Varnish 4.x默认仅在启动时做一次DNS解析,解析后的运行时IP不会纳入普通检索的匹配范围。
解决方法
无需修改VCL的操作方案
直接在命令中添加-p参数即可实现IP、端口的过滤和后端状态设置:
- 查看带IP端口的完整后端列表
varnishadm backend.list -p
- 按IP过滤后端
varnishadm backend.list -p *10.105*
- 设置后端状态,先通过上面的命令拿到完整的后端标识(格式为
后端名(IP:端口)),再执行对应命令即可,示例:
# 手动将指定后端设为sick状态 varnishadm backend.set_state xxx-www-5(10.105.xxx.xxx:xxx443) sick
需修改VCL的永久适配方案
如果需要直接用无-p参数的命令检索IP,直接把所有backend块的.host字段从域名替换为对应的IP地址,重载Varnish配置后即可生效。如果你的后端域名对应的IP会动态变化,不建议使用该方案,可以额外配置动态DNS解析参数:
- 在backend块中添加
.dynamic = true配置 - 调整Varnish启动参数中的
backend_dns_ttl值控制DNS解析缓存的时长
配置动态DNS后仍可以用带-p参数的方案操作后端。
内容的提问来源于stack exchange,提问作者Marco Shaw
相关产品推荐
相关产品推荐

