NGINX--在配置文件中显示主机名的缓存IP?

NGINX--在配置文件中显示主机名的缓存IP?,nginx,amazon-ec2,Nginx,Amazon Ec2,[SHORT VERSION]我知道,当NGINX查看配置文件时,它会对其中的主机名进行DNS查找,然后将结果(主机名应解析到的IP地址)存储在某个位置,并在下次查看配置文件之前使用它们(据我所知,默认情况下直到下次重新启动)是否有办法查看当前运行的NGINX服务所具有的主机名到ips的映射?我知道有办法配置NGINX以说明主机名的ips更改。我想看看我的NGINX目前认为它应该解析我的主机名 [详细说明]我使用AWS ELB(经典)的DNS名称作为代理传递的主机名。由于AWS ELB的公共和私

[SHORT VERSION]我知道,当NGINX查看配置文件时,它会对其中的主机名进行DNS查找,然后将结果(主机名应解析到的IP地址)存储在某个位置,并在下次查看配置文件之前使用它们(据我所知,默认情况下直到下次重新启动)是否有办法查看当前运行的NGINX服务所具有的主机名到ips的映射?我知道有办法配置NGINX以说明主机名的ips更改。我想看看我的NGINX目前认为它应该解析我的主机名

[详细说明]我使用AWS ELB(经典)的DNS名称作为代理传递的主机名。由于AWS ELB的公共和私有IP都可以更改(恕不另行通知),因此NGINX在服务开始时为该主机名映射的任何IP都将在更改后过期。我相信IP变化刚刚发生在我身上,因为我的NGINX服务正在将流量转发到一个不同于其配置中指定的集群。重新启动NGINX服务修复了该问题。但是,同样,我希望看到NGINX目前认为应该将流量发送到哪里,而不是如何修复或阻止流量(大量在线资源用于处理动态上游,显然我应该在部署NGINX服务之前使用这些资源…)


提前谢谢你

您只需要
解析器
选项

使用此选项,nginx将在不重新启动的情况下查找DNS更改。但仅适用于
proxy\u pass
指令。如果您使用的是
上游
,则此操作无效。仅在Nginx PLUS版本中支持上游服务器的DNS解析

如果您想知道上游服务器的IP,有几种方法:
-在PLUS版本中,您可以使用状态模块或上游配置模块,但PLUS版本不是免费的
-一些第三方状态模块
-将此IP写入每个请求的日志,只需将
$upstream\u addr
变量添加到自定义访问日志
$upstream\u addr
包含当前请求中使用的后端服务器的IP地址。配置示例:

log_format upstreamlog '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent $upstream_addr';

server {
   ...
   access_log /tmp/test_access_log upstreamlog;
   resolver ip.of.local.resolver;
   location / {
     set $pass dns_name.of.backend;
     proxy_pass http://$pass;
   }
}
注意:始终将变量用于
proxy\u pass
-只有在这种情况下才会使用
resolver
。日志的示例:

127.0.0.1 - - [10/Jan/2017:02:12:15 +0300] "GET / HTTP/1.1" 200 503 213.180.193.3:80
127.0.0.1 - - [10/Jan/2017:02:12:25 +0300] "GET / HTTP/1.1" 200 503 213.180.193.3:80
.... IP address changed, nginx wasn't restarted ...
127.0.0.1 - - [10/Jan/2017:02:13:55 +0300] "GET / HTTP/1.1" 200 503 93.158.134.3:80
127.0.0.1 - - [10/Jan/2017:02:13:59 +0300] "GET / HTTP/1.1" 200 503 93.158.134.3:80

谢谢你的建议。是的,这就是我最后做的。但是,我想知道的是如何查看我正在运行的NGINX服务在ips主机名方面的功能,而不是如何配置dynamic upstream.Edited。IMHO,将
$upstream\u addr
写入自定义访问日志的最快最简单的方法再次感谢您的精心设计!但我猜在自定义访问日志中打印出上游地址需要重新启动NGINX服务…对吗?只有一次:对于安装日志格式和访问日志:)
$upstream\u addr
将打印使用过的后端的IP,因此如果后端的IP将更改,则日志中的IP也将更改。参见我的答案中的示例。