返回
创建于
状态
公开
server bar:3000 resolve; 是 Nginx upstream 配置中的一条指令,用于实现动态 DNS 解析。下面详细解释其含义和用法:
语法说明
1upstream backend {
2 server bar:3000 resolve;
3}server bar:3000
指定上游服务器的主机名(bar)和端口(3000)。resolve
表示Nginx会定期通过DNS解析bar的IP地址,而不是只在启动时解析一次。
作用
-
动态解析主机名
默认情况下,Nginx 只会在启动或 reload 配置时解析一次 upstream 里的主机名。如果后端服务的 IP 地址发生变化(比如容器重启、后端弹性伸缩),Nginx 不会自动感知。加上
resolve后,Nginx 会定期重新解析主机名,自动获取最新的 IP 地址,实现对动态后端的支持。 -
适用于云原生、容器环境
在 Kubernetes、Docker 等环境下,后端服务的 IP 可能经常变动,resolve能保证 Nginx 始终代理到正确的后端。
注意事项
- 必须配置
resolver指令
否则 Nginx 不知道用哪个 DNS 服务器去解析主机名。比如:1resolver 127.0.0.11 valid=10s; # Docker 环境 2# 或 3resolver 8.8.8.8; # 公网 DNS resolve只对主机名有效
如果写成 IP 地址,resolve没有任何作用。- 不是所有 Nginx 版本都支持
需要 1.11.3 及以上版本。
实际用法示例
1upstream backend {
2 server bar:3000 resolve;
3}
4
5resolver 127.0.0.11 valid=10s;
6
7server {
8 listen 80;
9 location / {
10 proxy_pass http://backend;
11 }
12}总结
server bar:3000 resolve;让 Nginx 能自动检测并使用 bar 主机名最新解析出来的 IP 地址,适合动态后端场景。- 配合
resolver使用,适用于容器、云原生等经常变更后端 IP 的场景。