nginx解析器 - dns

时间:2018-04-04 02:11:38

标签: nginx dns resolver

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

我无法理解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是什么?

任何指导或链接都将不胜感激。

aTdHvAaNnKcSe (感谢提前)

3 个答案:

答案 0 :(得分:4)

Resolve意味着DNS服务器在必须解析外部URL时应该引用哪个DNS服务器。如果您有如下配置

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

现在默认nginx会从主机/etc/resolv.conf中选择你的解析器,它可能不是你需要的。可能是你想在这种情况下使用谷歌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; 
}

答案 1 :(得分:0)

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

正如Tarun解释的那样,默认情况下,nginx将从主机/etc/resolv.conf中选择解析器,解析后,它将缓存IP。解析器通常在两种情况下使用:
1.在专用网络中的任何一种都用于解析网络中存在的IP。
2.或在proxy_pass或上游位置的IP更改非常频繁且不能依赖nginx缓存IP的地方使用。

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

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

2)x.x.x.x:托管在您的专用网络或任何公共DNS服务器(如果您的URL可公开访问)中的DNS服务器的IP。人们可能会使用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/

答案 2 :(得分:-1)

如果您想手动设置分辨率,而无需使用诸如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
}