Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

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

  •  
  •   zhoudaiyu ·
    PRO
    · Mar 10, 2022 · 3165 views
    This topic created in 1530 days ago, the information mentioned may be changed or developed.

    最近发现某台 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 replies    2022-03-11 11:40:19 +08:00
    wy315700
        1
    wy315700  
       Mar 10, 2022
    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
    PRO
       Mar 10, 2022 via iPhone
    但是为啥要反向解析呢?我都写的是 IP 啊
    salmon5
        3
    salmon5  
       Mar 10, 2022   ❤️ 1
    nginx -t 会检测并缓存 proxy_pass 后的域名对应的 IP ,这里需要调用 DNS
    salmon5
        4
    salmon5  
       Mar 10, 2022   ❤️ 1
    nginx 调用 DNS 直接连的是 IP ,lsof -d 5 对外连的 DNS 进行了反向解析,可以 lsof -d 5 -n 就是 IP 了。
    zhoudaiyu
        5
    zhoudaiyu  
    OP
    PRO
       Mar 10, 2022
    @salmon5 #4 大佬,你说的对,加了-n 确实就不反向解析了,但是还有一点疑问,我看了一下 strace ,当时很多都是通过 dnspod 解析超时了,然后换了第二个位置的阿里 dns 解析出了 IP ,可是当时抓了一下包,看了确实可以用 dnspod 去解析域名的,所以还是觉得有点奇怪。
    watcher
        6
    watcher  
       Mar 11, 2022
    lsof 本着一切皆文件的原则 肯定优先展示的不是网络地址而是主机号然后会调用 gethostbyaddr
    zhoudaiyu
        7
    zhoudaiyu  
    OP
    PRO
       Mar 11, 2022
    @watcher #6 非抬杠,就是想问一下:优先展示主机号而不是 IP 地址的逻辑为啥是一切皆文件呢?
    watcher
        8
    watcher  
       Mar 11, 2022   ❤️ 1
    @zhoudaiyu 桌面放个文件 给人展示文件名比直接展示文件地址更直观
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5248 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 07:41 · PVG 15:41 · LAX 00:41 · JFK 03:41
    ♥ Do have faith in what you're doing.