我正在开发一个本地开发虚拟机,并试图用gunicorn和nginx作为静态资源的反向代理来testing我的站点。 该网站用user nginx;
加载减去静态资源user nginx;
在nginx.conf中。 尝试单独加载静态资源会显示403 Forbidden错误。
为背景。 静态资源位于/media/sf_work
下的共享文件夹中。 所有文件都由root:vboxsf
拥有root:vboxsf
(VirtualBox默认)。 我在系统上的用户帐户已被添加到vboxsf
组,并且我可以完全访问共享文件夹。
为了比较,我尝试将nginx.conf用户更改为我的用户帐户。 在这种情况下,静态文件确实加载,但是然后主页本身给出了一个403 Forbidden错误。 所以,我尝试添加nginx
用户到vboxsf
组,但是然后一切都给出了一个403 Forbidden错误。 经过进一步调查,似乎如果nginx.conf用户在任何组中,它会导致403禁止。
任何想法可能会发生在这里?
UPDATE
因此,当使用我的用户帐户作为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; }
这有什么不对吗?
所以,我终于解决了。 首先,nginx.conf用户必须有权访问共享文件夹,显然,这意味着我必须使用我的用户帐户。 我对此并不高兴,但这仅仅是一个开发箱,所以安全性并不是问题。
然后,我的try_files
指令有问题。 回想起来,这是非常有道理的。 我正在请求/
,那个目录实际上确实存在,但我不想要那个匹配。 所以我真正需要的是:
try_files $uri @proxy
然后,一切正常。