我正在本地开发虚拟机上工作,并尝试使用 gunicorn 和 nginx 作为静态资源的反向代理来测试我的网站。该网站在 user nginx;
nginx.conf 中加载了非静态资源。尝试单独加载静态资源会显示 403 Forbidden 错误。
背景。静态资源位于 下的共享文件夹中/media/sf_work
。所有文件均归root:vboxsf
(VirtualBox 默认) 所有。系统上的我的用户帐户已添加到该vboxsf
组,并且我对共享文件夹具有完全访问权限。
为了进行比较,我尝试将 nginx.conf 用户更改为我的用户帐户。在这种情况下,静态文件确实加载了,但主页本身却出现了 403 Forbidden 错误。因此,我尝试将用户添加nginx
到vboxsf
组中,但一切都出现了 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
然后,一切都顺利了。