403 禁止使用 nginx 从 VirtualBox 共享文件夹提供静态文件(Ubuntu 10.04LTS 客户机,Windows 7 主机)

403 禁止使用 nginx 从 VirtualBox 共享文件夹提供静态文件(Ubuntu 10.04LTS 客户机,Windows 7 主机)

我正在本地开发虚拟机上工作,并尝试使用 gunicorn 和 nginx 作为静态资源的反向代理来测试我的网站。该网站在 user nginx;nginx.conf 中加载了非静态资源。尝试单独加载静态资源会显示 403 Forbidden 错误。

背景。静态资源位于 下的共享文件夹中/media/sf_work。所有文件均归root:vboxsf(VirtualBox 默认) 所有。系统上的我的用户帐户已添加到该vboxsf组,并且我对共享文件夹具有完全访问权限。

为了进行比较,我尝试将 nginx.conf 用户更改为我的用户帐户。在这种情况下,静态文件确实加载了,但主页本身却出现了 403 Forbidden 错误。因此,我尝试将用户添加nginxvboxsf组中,但一切都出现了 403 Forbidden 错误。经过进一步调查,似乎如果 nginx.conf 用户处于任何组,则会导致 403 Forbidden。

知道这里可能发生什么事吗?

更新

因此,当我使用我的用户帐户作为 nginx 用户(静态文件工作的唯一方式)时,主页返回 403 Forbidden 的问题与目录中没有 index.html 文件有关(目录列表被拒绝)。但是,我显然不希望它列出目录;它应该将此请求传递给 gunicorn 代理。我正在使用以下内容:

location / {
    try_files $uri $uri/ @proxy
}
location @proxy {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;
    proxy_pass http://127.0.0.1:8080;
}

这有什么问题吗?

答案1

所以,我终于解决了这个问题。首先,nginx.conf 用户必须有权访问共享文件夹,这显然意味着我必须使用我的用户帐户。我对此并不满意,但这只是一个开发箱,因此安全性确实不是问题。

然后,我的指令出现了问题try_files。回想起来,这完全说得通。我请求的是/,并且该目录确实存在,但我不需要该匹配。所以我真正需要的是:

try_files $uri @proxy

然后,一切都顺利了。

相关内容