nginx - 领事模板 - “如果服务存在”条件?
问题描述
我刚刚继承了一个 Nginx 代理/应用服务器设置,它使用 Consul 和 Consul Template 进行服务发现和注册。Nginx 代理有一个配置文件,其中包含这样的条目来注册下游应用服务器:
<snip>
upstream appservers {
{{ range service "my-app-servers" }}
server {{ .Address }}.{{ .Port }};
{{ end }}
}
<snip>
我consul-template
在后台运行以捕获任何更新my-app-servers
,适当地更新nginx.conf
文件,然后重新加载 nginx 配置。这一切都很好,我们能够根据需要从组合中添加和删除应用程序服务器。也就是说,如果我们没有可用的应用服务器,我们最终会得到一个空upstream
块,这会导致 nginx 重新加载失败。
领事模板中有没有办法拥有"if service my-app-servers exists, then..."
和"if not, then..."
逻辑?我希望能够让我的nginx.conf
文件针对存在上游服务器的情况进行一种配置,以及在上游服务器不存在时显示错误页面的另一种应急设置。我仍然在加快 consul-template 的速度,还没有看到任何显示这种逻辑语法的示例。有什么帮助吗?
解决方案
您可以通过将service
查找结果存储在变量中来实现此目的,然后使用仅在变量不为空时输出上游块的条件。
{{- $upstream_services := service "my-app-servers" -}}
{{- if $upstream_services -}}
upstream appservers {
{{- range $upstream_services }}
server {{ .Address }}.{{ .Port }};
{{- end }}
}
{{- end }}
推荐阅读
- conv-neural-network - 坐标的指数热图
- binance - 从币安 API 端点获取历史最高价和历史最低价
- scala - Simba JDBC 驱动程序和读取超时错误 BigQuery
- python - 在 Django Project 中显示 UserInfo 匹配查询不存在
- c# - 使用以模式开头的动态对象反序列化 json
- java - Springfox 3.0.0:java.lang.IllegalStateException:条件为空时的模棱两可模型相等
- android - 安卓通知不显示
- keyboard - macCatalyst - 输入/空格键激活 UIBarButtonItem
- c++ - 运行 F-stack DPDK 可执行文件 - 不支持的 Rx 多队列模式 1
- c++ - c ++设置擦除功能无法与迭代器一起正常工作