[英]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.