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配置文件,但我真的不知道要查找什么
[${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