请原谅一个非常初学的问题。
我无法理解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 (感谢提前)
答案 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
}