[英]File not found error from nginx on a virtual machine where /var/www/ is mounted from host file structure
我正在尝试将一个相当复杂的开发环境设置为虚拟Ubuntu 12.04服务器。
为了使我可以编辑文件并在刷新页面时立即看到更改,就像您在正常的本地开发情况下所期望的那样,我在〜/ www / site1中的主机操作系统(薄荷14)上有php源代码我已将其作为持久共享文件夹添加到virtualbox,然后将其安装在虚拟机上
mount -t vboxsf site1 /var/www
如果我ls / var / www -la我看到了所有的php文件,但是当我尝试从浏览器访问虚拟机时,页面上出现File not found错误,并且在stderr中发送了FastCGI的子域报告error.log :“从上游读取响应头时,”主脚本未知“ 。例外是子域phpmyadmin.virtualmachine完美加载,因此我知道nginx为所请求的子域提供正确的文件结构。
作为测试,我创建了一个指向/ var / test的子域info.virtualmachine,而index.php是最简单的phpinfo(),并且可以正常工作,因此我只能假定nginx不会读取已安装的vboxsf文件结构/ var / www可以正确查看,因为可以查看来宾OS上的所有“本地”文件。
Nginx已配置为以root身份运行,而其他所有服务均以root身份运行。 这是nginx的已知错误,还是我需要配置以允许nginx查看已安装的vboxsf共享的东西?
我找到了答案,事实证明这是由于文件许可以及对php-fpm的工作方式不熟悉。
首先,我在虚拟服务器中启用了root用户,并使用超级用户来控制守护程序,将它们全部设置为以root用户身份运行。 php-fpm的父进程以root身份运行,但所有子进程均以www-data身份运行。 以root身份挂载共享导致php-fpm的子进程无法使用该文件夹,这导致nginx抛出文件未找到错误,并且由于vboxsf的工作方式,我无法对共享进行chown或chmod。
通过使用以下命令将共享添加到/ etc / fstab来解决此问题:
sharename /var/www vboxsf rw,uid=33,gid=33 0 0
这样就可以将共享安装在www-data用户下,从而为www-data提供读取权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.