После нескольких дней интенсивных поисков, чтобы решить мою проблему, я не мог получить ничего, что работало, так что вот оно.
Я запускаю chroot php с FastCGI и php-fpm (в Ubuntu 16.04 с php7), который работает хорошо, однако я получаю ожидаемую проблему с разрешением 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>
Спасибо !
Под 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)
Других решений пока нет …