返回
创建于
状态公开

server bar:3000 resolve; 是 Nginx upstream 配置中的一条指令,用于实现动态 DNS 解析。下面详细解释其含义和用法:

语法说明

nginx
1upstream backend {
2    server bar:3000 resolve;
3}
  • server bar:3000
    指定上游服务器的主机名(bar)和端口(3000)。
  • resolve
    表示Nginx会定期通过DNS解析bar的IP地址,而不是只在启动时解析一次。

作用

  1. 动态解析主机名
    默认情况下,Nginx 只会在启动或 reload 配置时解析一次 upstream 里的主机名。如果后端服务的 IP 地址发生变化(比如容器重启、后端弹性伸缩),Nginx 不会自动感知。

    加上 resolve 后,Nginx 会定期重新解析主机名,自动获取最新的 IP 地址,实现对动态后端的支持。

  2. 适用于云原生、容器环境
    在 Kubernetes、Docker 等环境下,后端服务的 IP 可能经常变动,resolve 能保证 Nginx 始终代理到正确的后端。

注意事项

  • 必须配置 resolver 指令
    否则 Nginx 不知道用哪个 DNS 服务器去解析主机名。比如:
    nginx
    1resolver 127.0.0.11 valid=10s; # Docker 环境
    2# 或
    3resolver 8.8.8.8; # 公网 DNS
  • resolve 只对主机名有效
    如果写成 IP 地址,resolve 没有任何作用。
  • 不是所有 Nginx 版本都支持
    需要 1.11.3 及以上版本。

实际用法示例

nginx
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 的场景。