【发布时间】:2017-10-24 22:50:08
【问题描述】:
经过几天的密集搜索以解决我的问题,我找不到任何有效的方法,所以就在这里。
我正在使用 FastCGI 和 php-fpm(在 Ubuntu 16.04 和 php7 下)运行一个 chrooted php,它运行良好,但是我遇到了预期的 DNS 解析问题,例如在尝试 file_get_content 时:file_get_contents(): php_network_getaddresses: getaddrinfo failed。
我在网上看了很多,这是我已经尝试过的(没有成功):
- 我使用了here描述的方法,也尝试了适配this tutorial以便复制所有php使用的库,当然也复制了hosts和resolv files
- 我还尝试使用 nscd 将主机文件挂载到 /var/run/nscd 的 chroot 内,从而链接 chroot 内外的主机文件
- 我也遇到了一些 SSL 问题,所以我下载了 this certificate 并将其放在可能缺少默认 php-curl 证书的位置(在
openssl_get_cert_locations()之后找到:["default_cert_file"]=> string(21) "/usr/lib/ssl/cert.pem)
编辑: 这似乎没有多大作用,因为 phpinfo() 没有为证书文件返回任何值(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>
谢谢!
【问题讨论】: