文档首页/ 云解析服务 DNS/ 常见问题/ 产品咨询类/ 如何配置Nginx解析域名?
更新时间:2024-10-18 GMT+08:00
分享

如何配置Nginx解析域名?

应用场景

图1 场景示意

DNS解析配置

表1 DNS解析配置

域名类型

主机记录

类型

TTL(秒)

内网域名

upstream.test0222test.top

A

30

192.168.0.177

nginx.test0222test.top

A

300

192.168.0.208

公网域名

upstream.test0222test.top

A

30

192.168.0.188

操作步骤

  1. proxy_pass配置IP访问

    cn-east-3-nginx-server Nginx配置:

    location /test_proxy_pass {
        proxy_pass http://192.168.0.177:80/status;
    }

    测试nginx.test0222test.top可以正常访问upstream。

  2. proxy_pass配置域名访问,通过系统的/etc/resolv.conf里的server解析。

    cn-east-3-nginx-server Nginx配置:

    location /test_proxy_pass {
        proxy_pass http://upstream.test0222test.top:80/status;
    }

    删除内网域名,域名解析到公网的IP。等待超过30s,仍然正常访问upstream。

    reload nginx,测试无法访问upstream。

  3. 修改cn-east-3-nginx-server Nginx配置,增加关键字resolver 100.125.1.250,不再使用操作系统的/etc/resolv.conf里提供的配置,恢复内网域名的配置。
    resolver 100.125.1.250;
    location /test_proxy_pass {
       proxy_pass http://upstream.test0222test.top:80/status;
    }

    测试正常访问upstream。

    删除内网域名,等30s,仍然正常访问upstream。

    reload nginx,测试无法访问upstream。

  4. 修改cn-east-3-nginx-server Nginx配置,使用set指令,将域名设置为变量,在proxy_pass用变量引用,恢复内网域名配置。
    resolver 100.125.1.250;
    location /test_proxy_pass {
      set $upstream_server upstream.test0222test.top;
       proxy_pass http://$upstream_server:80/status;
    }

    测试nginx.test0222test.top可以正常访问upstream。

    删除内网域名,等30s,再次测试,upstream已无法访问。

  5. 修改cn-east-3-nginx-server Nginx配置,将通过100.125.1.250解析到的值的生效时间(valid)修改为600s,恢复内网域名的配置并重载nginx。
    resolver 100.125.1.250 valid=600;
        location /test_proxy_pass {
        set $upstream_server upstream.test0222test.top;
        proxy_pass http://$upstream_server:80/status;
    }

    测试nginx.test0222test.top可以正常访问upstream。

    删除内网域名配置。

    等待超过30s,再次测试。

    等待超过600s,再次测试,curl失败。

  6. 恢复内网域名配置,将TTL修改为600s;修改nginx配置,将valid参数修改为30s。
    resolver 100.125.1.250 valid=30;
        location /test_proxy_pass {
        set $upstream_server upstream.test0222test.top;
        proxy_pass http://$upstream_server:80/status;
    }

    测试nginx.test0222test.top可以正常访问upstream。

    删除内网域名,30s后再次测试是否可以访问upstream。

    恢复内网域名后,30s后,测试正常

  7. 多值测试,内网域名同时配置192.168.0.177和192.168.0.188两个值。

    测试时可以观察到,curl的时候,有50%概率卡顿后很快恢复,说明使用了192.168.0.188(可以通过日志中观察)。

方案总结

  • 如果不使用set指令,将域名指定为变量,并在uri里使用,nginx只会在启动/reload时解析一次,永久使用。
  • 重载nginx,会触发域名的重新解析。
  • Resolver的valid指令,支持版本是nginx的1.17.5版本以上。
  • 使用resolver指令,可以定义nginx自己使用的DNS服务器。
  • 在resolver指令后增加valid=xxx指令,可以强制修改域名的TTL值。
  • 使用ipv4=on/off/ipv6=on/off指令,可以关闭A/AAAA的请求。
  • 当域名配置多值时,nginx都会缓存,并且轮询使用。

相关文档