php fpm chroot下的DNS解析错误

php fpm chroot下的DNS解析错误,php,apache,dns,chroot,Php,Apache,Dns,Chroot,为了解决我的问题,经过几天的密集搜索,我找不到任何有效的方法,所以它就在这里。 我正在使用FastCGI和php fpm运行一个chrooted php(在Ubuntu 16.04下,使用php7),运行得很好,但是我遇到了预期的DNS解析问题,例如,当尝试归档内容时:file\u get\u contents():php\u network\u getaddresses:getaddrinfo失败 我在网上浏览了很多次,下面是我已经尝试过的(没有成功): 我使用了所描述的方法,并尝试进行调整

为了解决我的问题,经过几天的密集搜索,我找不到任何有效的方法,所以它就在这里。
我正在使用FastCGI和php fpm运行一个chrooted php(在Ubuntu 16.04下,使用php7),运行得很好,但是我遇到了预期的DNS解析问题,例如,当尝试归档内容时:
file\u get\u contents():php\u network\u getaddresses:getaddrinfo失败

我在网上浏览了很多次,下面是我已经尝试过的(没有成功):

  • 我使用了所描述的方法,并尝试进行调整,以便复制php使用的所有库,当然还复制了主机和resolv文件
  • 我还尝试使用nscd在chroot内部的/var/run/nscd处挂载主机文件,从而将主机文件链接到chroot内部和外部
  • 我还遇到了一些SSL问题,所以我下载了它,并将其放在可能缺少默认php curl证书的位置(在
    openssl\u get\u cert\u locations()之后找到):
    [“default\u cert\u file”]=>string(21)”/usr/lib/SSL/cert.pem

    编辑:这似乎没什么作用,因为phpinfo()没有为certs文件()返回任何值,所以我可能应该调整一点openssl配置文件,但我真的不知道要查找什么
使用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文件:

<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>

服务器名www.${domain}
服务器别名${domain}
ServerAdmin网站管理员@${domain}
DocumentRoot/var/www/${username}/var/www/${username}
AddHandler php7 fcgi-${username}.php
操作php7 fcgi-${username}/php7 fcgi-${username}virtual
别名/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-通过头授权
要求所有授权

谢谢!

在Ubuntu 16.04下,您的chroot中至少需要以下文件:

etc/resolv.conf
lib/libnss_dns.so.2
您可以硬链接以防止使用额外的磁盘空间(仅当chroot与/lib位于同一分区上时有效):

如果仍然失败(未来的Ubuntu?),您可以通过运行
strace-e file-fp$(pgrep fpm)

ln --logical /lib/x86_64-linux-gnu/libnss_dns.so.2 /chroot/lib