[英]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
文件mount --bind
/dev/urandom
(通过mknod
)mount --bind
mount --bind
。mount --bind
用于套接字到 nscd 解析器。当 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()
都可以正常工作。
三个问题:
gethostbynamel()
失败时,是什么让dns_get_record()
和checkdnsrr()
实现解析 FQDN?gethostbynamel()
在 chrooted 设置中需要什么?软件版本:
谢谢
根据对该问题的评论, 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.