经过几天的密集搜索来解决我的问题,我无法得到任何有效的东西,所以这就是。
我正在使用FastCGI和php-fpm(在带有php7的Ubuntu 16.04下)运行chrooted php,这很好用,但是我得到了预期的DNS解析问题,例如在尝试file_get_content:file_get_contents(): php_network_getaddresses: getaddrinfo failed
时。
我在网上看了很多,这是我已经尝试过的(没有成功):
openssl_get_cert_locations()
后找到:["default_cert_file"]=> string(21) "/usr/lib/ssl/cert.pem
)使用debootstrap(或其他这样的程序)对我来说不是一个选项,因为它创建了一个太大的chroot,我愿意保持它的轻量级和快速创建,因为我可以在一台机器上运行很多chroot
另外,这是我的配置文件,但是我怀疑这里的问题是因为大多数php函数在chroot下运行良好:
默认php-fpm池:
[${username}]
user = ${username}
group = www-data
listen = /run/php/php7.0-fpm.${username}.sock
listen.owner = ${username}
listen.group = www-data
pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 10s
pm.max_requests = 250
chroot = /var/www/${username}
chdir = /
默认的apache虚拟主机文件:
<VirtualHost *:80>
ServerName www.${domain}
ServerAlias ${domain}
ServerAdmin webmaster@${domain}
DocumentRoot /var/www/${username}/var/www/${username}
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi-${username} .php
Action php7-fcgi-${username} /php7-fcgi-${username} virtual
Alias /php7-fcgi-${username} /usr/lib/cgi-bin/php7-fcgi-${username}
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-${username} -socket /var/run/php/php7.0-fpm.${username}.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
</VirtualHost>
谢谢!
答案 0 :(得分:2)
在Ubuntu 16.04下,你的chroot至少需要这些文件:
etc/resolv.conf
lib/libnss_dns.so.2
您可以使用硬链接来防止使用额外的磁盘空间(仅当chroot与/ lib位于同一分区时才有效):
ln --logical /lib/x86_64-linux-gnu/libnss_dns.so.2 /chroot/lib
如果它仍然失败(未来的Ubuntu?),您可以通过运行strace -e file -fp $(pgrep fpm)
来调试问题