繁体   English   中英

从主机文件结构挂载了/ var / www /的虚拟机上的nginx上的“找不到文件”错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM