簡體   English   中英

Chrooted PHP-FPM 腳本在一段時間后無法解析 DNS

[英]Chrooted PHP-FPM script cannot resolve DNS after a moment

我需要一些幫助來理解為什么 PHP-FPM chroot 的 PHP 腳本在 PHP-FPM 服務啟動后的幾個瞬間無法解析 FQDN。

當我(重新)啟動 PHP-FPM 服務時,它工作(解析成功)幾秒鍾,然后解析失敗。

我通過 PHP-FPM(在 PHP-FPM 池配置文件中設置``chroot`)對一個 PHP 應用程序(實際上是一個 WordPress)進行了 chroot,並為 PHP 提供了它需要的東西:

  • 一個基本的/etc/hosts文件
  • /etc/ssl/certs 的mount --bind
  • A /dev/urandom (通過mknod
  • /usr/share/zoneinfo 的mount --bind
  • 用於連接到 MySQL 的套接字的 /var/run/mysqld 的mount --bind
  • 將 /var/run/nscd 的mount --bind用於套接字到 nscd 解析器。
  • 一個存儲 PHP 會話的地方

當 WordPress 抱怨無法下載更新時,我注意到了這個問題:

stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known stream_socket_client(): 無法連接到 tcp://www.wordpress.org:80 (php_network_getaddresses: getaddrinfo failed: Name or service not known)

示例腳本:

<?php
$domain = 'www.example.com';
echo 'gethostbynamel(): '; var_dump(gethostbynamel($domain));
echo 'checkdnsrr(): ';     var_dump(checkdnsrr($domain, 'A'));
echo 'dns_get_record(): '; var_dump(dns_get_record($domain));
?>

當它工作時:

gethostbynamel(): array(1) {
  [0]=>
  string(13) "93.184.216.34"
}
checkdnsrr(): bool(true)
dns_get_record(): array(1) {
  [0]=>
  array(5) {
    ["host"]=>
    string(15) "www.example.com"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(86348)
    ["type"]=>
    string(1) "A"
    ["ip"]=>
    string(13) "93.184.216.34"
  }
}

幾分鍾后:

gethostbynamel(): bool(false)
checkdnsrr(): bool(true)
dns_get_record(): array(1) {
  [0]=>
  array(5) {
    ["host"]=>
    string(15) "www.example.com"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(86400)
    ["type"]=>
    string(1) "A"
    ["ip"]=>
    string(13) "93.184.216.34"
  }
}

請注意,在任何情況下, dns_get_record()checkdnsrr()可以正常工作。

三個問題:

  1. gethostbynamel()失敗時,是什么讓dns_get_record()checkdnsrr()實現解析 FQDN?
  2. gethostbynamel()在 chrooted 設置中需要什么?
  3. 什么可以讓它只工作片刻?

軟件版本:

  • Debian 9
  • nginx 10.3
  • PHP 7.0.19

謝謝

根據對該問題的評論, Chrooted PHP-FPM 腳本稍后無法解析 DNS ,OP 能夠通過將以下文件添加到 jail 來解決該問題:

  • /lib/x86_64-linux-gnu/libnss_dns.so.2 (或取決於操作系統變體, /lib/libnss_dns.so
  • /etc/nsswitch.conf
  • /etc/resolv.conf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM