NGINX 测试配置文件时为啥会去访问 DNS?

2022-03-10 17:40:31 +08:00
 zhoudaiyu

最近发现某台 NGINX 服务器执行 nginx -t 的时候返回结果非常慢,其他机器非常快,今天决定解决一下,遂用 strace 打印了 nginx -t 执行时的系统调用,抓出来了几个慢的系统调用,类似于 https://i.v2ex.co/rvO8s03v.png 这种,然后我尝试在执行 nginx -t 的同时,循环执行 lsof -d 5 观察到了 NGINX 一直在连接 pdns.dnspod.cn 这个域名,查看了 resolve.conf ,确实首个配置是 nameserver 119.29.29.29 ( dnspod ),第二个是 nameserver 223.5.5.5 (阿里),对调了两者在配置文件中的位置后,nginx -t 变得非常快。现在有两个疑问,第一是为啥 nginx -t 的时候要去测试 DNS ?第二个就是为什么我在 /etc/resolve.conf 中明明写的是 IP 地址( 119.29.29.29 ),nginx 会解析到 pdns.dnspod.cn 这个域名呢?而且 pdns.dnspod.cn 解析出的 IP 也并不是 119.29.29.29 。

2611 次点击
所在节点    Linux
8 条回复
wy315700
2022-03-10 17:46:03 +08:00
DNS 反向解析


$ dig -x 119.29.29.29

; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> -x 119.29.29.29
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15379
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 40642852c08e1596 (echoed)
;; QUESTION SECTION:
;29.29.29.119.in-addr.arpa. IN PTR

;; ANSWER SECTION:
29.29.29.119.in-addr.arpa. 39637 IN PTR pdns.dnspod.cn.

;; Query time: 6 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: Thu Mar 10 17:45:43 CST 2022
;; MSG SIZE rcvd: 94
zhoudaiyu
2022-03-10 17:49:51 +08:00
但是为啥要反向解析呢?我都写的是 IP 啊
salmon5
2022-03-10 17:50:06 +08:00
nginx -t 会检测并缓存 proxy_pass 后的域名对应的 IP ,这里需要调用 DNS
salmon5
2022-03-10 17:53:48 +08:00
nginx 调用 DNS 直接连的是 IP ,lsof -d 5 对外连的 DNS 进行了反向解析,可以 lsof -d 5 -n 就是 IP 了。
zhoudaiyu
2022-03-10 19:12:32 +08:00
@salmon5 #4 大佬,你说的对,加了-n 确实就不反向解析了,但是还有一点疑问,我看了一下 strace ,当时很多都是通过 dnspod 解析超时了,然后换了第二个位置的阿里 dns 解析出了 IP ,可是当时抓了一下包,看了确实可以用 dnspod 去解析域名的,所以还是觉得有点奇怪。
watcher
2022-03-11 10:31:02 +08:00
lsof 本着一切皆文件的原则 肯定优先展示的不是网络地址而是主机号然后会调用 gethostbyaddr
zhoudaiyu
2022-03-11 10:56:03 +08:00
@watcher #6 非抬杠,就是想问一下:优先展示主机号而不是 IP 地址的逻辑为啥是一切皆文件呢?
watcher
2022-03-11 11:40:19 +08:00
@zhoudaiyu 桌面放个文件 给人展示文件名比直接展示文件地址更直观

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX