【问题标题】:nginx resolver -- dnsnginx解析器——dns
【发布时间】:2018-09-13 11:10:01
【问题描述】:

请原谅一个非常初学者的问题。

我无法理解 nginx 'resolver' 参数及其工作原理。我已阅读文档、搜索教程和帖子(使用解析器、nginx 和 dns 等关键字),但我仍然不确定如何应用解析器。

http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

“配置名称服务器,用于将上游服务器的名称解析为地址......”

  • 根据这个定义,它似乎只是完成了名称服务器的工作。 resolver ns1.myhost.com ns2.myhost.com; 但是例子指向 内部/私有 IP 地址。

“地址可以指定为域名或IP地址,以及可选的端口....”

  • 这意味着我可以resolver example.com www.example.com;(或resolver 12.34.56.78;),但同样,我在文档中没有看到这样的示例。

作为一个实际的例子,假设——纯粹是假设:)——我正在构建一个简单的 Web 服务器,上面有几个服务器块。

我是否将“解析器”设置为服务器本身的 IP?还是服务器局域网中的内部IP?文档似乎建议使用内部 IP(127.x.x.x 或 10.x.x.x)——但是如何设置/确定该 IP 是什么?

【问题讨论】:

    标签: nginx dns resolver


    【解决方案1】:

    Resolve 表示当它必须解析外部 url 时,nginx 应该引用哪个 DNS 服务器。如果你有如下配置

    location / {
        proxy_pass http://www.example.com/abc/def; 
    }
    

    现在默认情况下nginx 将从主机/etc/resolv.conf 中选择您的解析器,但它可能不是您需要的。如果您想使用 Google DNS 解析器,那么您将更新您的 nginx 配置,如下所示:

    location / {
        resolver 8.8.8.8;
        proxy_pass http://www.example.com/abc/def; 
    }
    

    如果您使用本地 DNS 解析器在本地网络中进行路由,那么您可以使用以下内容:

    location / {
        resolver 192.168.11.10;
        proxy_pass http://machineabc/abc/def; 
    }
    

    【讨论】:

    【解决方案2】:

    “Resolver”参数定义了 nginx 必须使用的 DNS 服务器的位置,以便解析在 proxy_pass 下传递的 URL 的 IP;

    正如 Tarun 所解释的,默认情况下,nginx 将从主机 /etc/resolv.conf 中选择您的解析器,一旦解析,它将缓存 IP。解析器主要用于两种情况:
    1. 在专用网络中,解析您网络中存在的 IP。
    2. 或者用在你proxy_pass的IP或者upstream位置变化非常频繁,不能依赖nginx缓存IP的地方。

    在您指定的示例中,解析器将是可以解析您的位置的 DNS 服务器的 IP。这可能是:

    1) 127.0.0.1 : 如果 Web 服务器本身是 DNS 服务器,为此您需要在此服务器的端口 53(默认)上设置 DNS 服务器。

    2) x.x.x.x :托管在您的私有网络或任何公共 DNS 服务器中的 DNS 服务器的 IP(如果您的 URL 可公开访问)。可以使用 8.8.8.8(Google 的公共 DNS 服务器)。

    3) 您指定了 10.x.x.x :假设您指的是 AWS 文档。如果不是,一般情况下,10.x.x.x 需要再次成为 DNS 服务器 IP,在 AWS 的情况下为 10.0.0.2。 AWS 保留其 VPC 的几个 IP,第二个 IP x.x.x.2 保留给 DNS 服务器。请注意,如果您的 VPC 不是 10.0.0.0/16,此 IP 将相应更改。例如:假设您的 VPC 是 10.192.0.0/16,那么您将使用 10.192.0.2 作为解析器。

    以上参考https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html

    https://www.jethrocarr.com/2013/11/02/nginx-reverse-proxies-and-dns-resolution/

    【讨论】:

      【解决方案3】:

      还有另一种方法可以做到这一点,如果您想手动设置分辨率,而不使用 bind9 或 dnsmasq 等外部工具

      location / {
          set $upstream 12.34.56.78;  # desired IP resolution
          proxy_pass  http://$upstream:8080; # desired port
          proxy_set_header Host example.com; # desired host
      }
      

      【讨论】:

      • 这与所提出的问题无关,最好使用upstream backend { server 12.34.56.78; },因为已知重写模块指令(集)会在更复杂的情况下产生意外行为。
      猜你喜欢
      • 2017-01-18
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多