php-fpm chroot下的DNS解析错误

时间:2017-10-24 22:50:09

标签: php apache dns chroot

经过几天的密集搜索来解决我的问题,我无法得到任何有效的东西,所以这就是。
我正在使用FastCGI和php-fpm(在带有php7的Ubuntu 16.04下)运行chrooted php,这很好用,但是我得到了预期的DNS解析问题,例如在尝试file_get_content:file_get_contents(): php_network_getaddresses: getaddrinfo failed时。

我在网上看了很多,这是我已经尝试过的(没有成功):

  • 我使用了here描述的方法,并尝试调整this tutorial以复制php使用的所有库,当然还有复制的主机和resolv文件
  • 我还尝试使用nscd将chroot内部和外部的hosts文件链接到/ var / run / nscd
  • 的chroot中
  • 我也遇到了一些SSL问题,因此我下载了this certificate并将其放在可能缺少默认php-curl证书的位置(在openssl_get_cert_locations()后找到:["default_cert_file"]=> string(21) "/usr/lib/ssl/cert.pem
    编辑这似乎没有做太多,因为phpinfo()没有返回certs文件的值(see),所以也许我应该调整一下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 *: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>

谢谢!

1 个答案:

答案 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)来调试问题