我正在尝试使用这样的位置块直接提供静态文件:
location /static/ {
alias /opt/graphite/webapp/content/;
}
但是,当我请求任何与 /static/ 匹配的内容时,我会收到 404 错误,并且在错误日志中出现如下消息:
2016/09/14 09:28:47 [error] 66068#0: *4 open() "/opt/graphite/webapp/content/js/completer.js" failed (2: No such file or directory), client: my.ip.add.ress, server: server.domain, request: "GET /static/js/completer.js HTTP/1.1", host: "server.ip", referrer: "http://server.ip/composer?"
问题是,该错误消息中给出的路径完全有效。该文件存在。它没有声称权限被拒绝,因此看起来不像是权限问题。代理到应用程序的位置工作正常。我不知所措,类似的帖子似乎都与套接字有关。
在 OpenBSD 6.0 上运行 nginx 1.10.1。
答案1
搞清楚了。OpenBSD 中的 nginx 发行版默认将 chrooting 设置为/var/www/
,从而拒绝访问该部分之外的整个文件系统。可以通过直接使用该-u
标志启动 nginx 或在 中的命令中添加相同的标志来规避此问题/etc/rc.d/nginx
。
另外,一旦您知道发生了什么,将所有东西移入 chroot 就非常简单了。