片刻之后,Chrooted PHP-FPM脚本无法解决DNS



我需要一些帮助,以了解为什么PHPM CHROOTED PHP脚本在PHP-FPM服务启动后几乎无法解决FQDN。

当我(re)启动php-fpm服务时,它起作用(分辨率成功)几秒钟,然后分辨率失败。

i通过php-fpm(在php-fpm池配置文件中设置````````chroot)chroot chroot chroot chroot of php fpm(wordpress),并给了php:

>
  • 基本/etc/hosts文件
  • /etc/ssl/certs的 mount --bind
  • a /dev/urandom(通过mknod
  • /usr/share/Zoneinfo的mount --bind
  • /var/run/mysqld的 mount --bind for socket to mysql。
  • mount --bind of/var/run/nscd for套接字到NSCD解析器。
  • 存储PHP会话的地方

我注意到WordPress抱怨无法下载更新时的问题:

stream_socket_client():php_network_getaddresses:getAddrinfo失败:名称或服务未知stream_socket_client():无法连接到tcp://www.wordpress.org:80)

示例脚本:

<?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. 是什么使dns_get_record()checkdnsrr()实现gethostbynamel()失败时解决FQDN?
  2. gethostbynamel()在chrooted设置中需要什么?
  3. 是什么才能使它仅在几分钟内起作用?

软件版本:

  • Debian 9
  • nginx 10.3
  • PHP 7.0.19

谢谢

根据问题的评论,恰恰是php-fpm脚本无法解决DNS,OP能够通过将以下文件添加到监狱中来解决问题:

  • /lib/x86_64-linux-gnu/libnss_dns.so.2(或取决于OS变体,/lib/libnss_dns.so
  • /etc/nsswitch.conf
  • /etc/resolv.conf

最新更新