0

我正在尝试设置一个相当复杂的开发环境作为虚拟 Ubuntu 12.04 服务器。

为了我可以编辑文件并在刷新页面时立即看到更改,正如您在正常本地开发情况下所期望的那样,我在 ~/www/site1 中拥有主机操作系统(mint 14)上的 php 源代码我已将其作为持久共享文件夹添加到 virtualbox,然后安装在虚拟机上

mount -t vboxsf site1 /var/www

如果我 ls /var/www -la 我看到所有的 php 文件,但是当我尝试从浏览器访问虚拟机时,我在页面上得到 File not found 错误,并且子域的 error.log 报告在 stderr 中发送的 FastCGI :“从上游读取响应标头时,主脚本未知”。例外是子域 phpmyadmin.virtualmachine,它可以完美加载,所以我知道 nginx 正在为请求的子域提供正确的文件结构。

作为测试,我创建了一个指向 /var/test 的子域 info.virtualmachine 并且 index.php 是最简单的 phpinfo() 并且它有效,所以我只能假设 nginx 没有读取挂载的 vboxsf 文件结构 /var/www正确,因为来宾操作系统上的所有“本地”文件都是可见的。

Nginx 已配置为与所有其他服务一样以 root 身份运行。这是 nginx 的已知错误还是我需要配置以允许 nginx 查看已安装的 vboxsf 共享?

4

1 回答 1

0

我找到了答案,结果证明是由于文件权限和我不熟悉 php-fpm 的工作原理。

对于初学者,我在虚拟服务器中启用了 root 用户并使用 supervisord 来控制守护进程,我将它们全部设置为以 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 的读取权限。

于 2013-01-20T10:19:35.033 回答