V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

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

  •  
  •   zhoudaiyu · 2022-03-10 17:40:31 +08:00 · 2634 次点击
    这是一个创建于 1024 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近发现某台 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 。

    8 条回复    2022-03-11 11:40:19 +08:00
    wy315700
        1
    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
        2
    zhoudaiyu  
    OP
       2022-03-10 17:49:51 +08:00 via iPhone
    但是为啥要反向解析呢?我都写的是 IP 啊
    salmon5
        3
    salmon5  
       2022-03-10 17:50:06 +08:00   ❤️ 1
    nginx -t 会检测并缓存 proxy_pass 后的域名对应的 IP ,这里需要调用 DNS
    salmon5
        4
    salmon5  
       2022-03-10 17:53:48 +08:00   ❤️ 1
    nginx 调用 DNS 直接连的是 IP ,lsof -d 5 对外连的 DNS 进行了反向解析,可以 lsof -d 5 -n 就是 IP 了。
    zhoudaiyu
        5
    zhoudaiyu  
    OP
       2022-03-10 19:12:32 +08:00
    @salmon5 #4 大佬,你说的对,加了-n 确实就不反向解析了,但是还有一点疑问,我看了一下 strace ,当时很多都是通过 dnspod 解析超时了,然后换了第二个位置的阿里 dns 解析出了 IP ,可是当时抓了一下包,看了确实可以用 dnspod 去解析域名的,所以还是觉得有点奇怪。
    watcher
        6
    watcher  
       2022-03-11 10:31:02 +08:00
    lsof 本着一切皆文件的原则 肯定优先展示的不是网络地址而是主机号然后会调用 gethostbyaddr
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2022-03-11 10:56:03 +08:00
    @watcher #6 非抬杠,就是想问一下:优先展示主机号而不是 IP 地址的逻辑为啥是一切皆文件呢?
    watcher
        8
    watcher  
       2022-03-11 11:40:19 +08:00   ❤️ 1
    @zhoudaiyu 桌面放个文件 给人展示文件名比直接展示文件地址更直观
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:37 · PVG 06:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.