Nginx解析器-DNS

Gee*_*cer 7 dns nginx resolver

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

我在理解nginx'resolver'参数及其工作方式时遇到麻烦。我已经阅读了文档,搜索了教程和帖子(使用诸如resolver,nginx和dns之类的关键字),但仍不确定如何应用resolver。

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.xxx或10.xxx),但是如何设置/确定该IP是什么?

小智 8

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

正如 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) xxxx :托管 DNS 服务器的 IP,可以在您的专用网络中,也可以在任何公共 DNS 服务器中(如果您的 URL 可公开访问)。可以使用 8.8.8.8(Google 的公共 DNS 服务器)。

3) 您指定了 10.xxx :假设您引用的是 AWS 文档。如果不是,一般来说,10.xxx 又需要是 DNS 服务器 IP,在 AWS 中为 10.0.0.2。AWS 保留其 VPC 的一些 IP,第二个 IP xxx2 保留给 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/


Tar*_*ani 7

解析表示nginx必须解析外部URL时应参考哪个DNS服务器。如果您有如下配置

location / {
    proxy_pass http://www.example.com/abc/def; 
}
Run Code Online (Sandbox Code Playgroud)

现在默认情况下nginx将从主机中选择您的解析器,/etc/resolv.conf而这可能不是您所需要的。也许您只是想在这种情况下使用google DNS解析器。然后您将nginx配置更新到下面

location / {
    resolver 8.8.8.8;
    proxy_pass http://www.example.com/abc/def; 
}
Run Code Online (Sandbox Code Playgroud)

可能是您正在使用本地DNS解析器在本地网络中进行路由,则可能使用以下类似内容

location / {
    resolver 192.168.11.10;
    proxy_pass http://machineabc/abc/def; 
}
Run Code Online (Sandbox Code Playgroud)