我在VPS上运行node.js API,该服务由Ubuntu 13.04上的nginx提供。
我正在使用restify并提供如下静态文件:
server.get(
/\/static\/?.*/,
restify.serveStatic({
directory: __dirname // => /home/misha/rxviz-api
})
);
以下是来自nginx config的相关位:
server {
listen 80;
server_name api.rxviz.com;
location / {
proxy_pass http://localhost:4010/;
}
}
(完整配置为here)
运行时:
curl http://localhost:4010/static/.well-known/acme-challenge/test.json
在VPS上,我得到test.json
的内容。
但是,导航到:
http://api.rxviz.com/static/.well-known/acme-challenge/test.json
在浏览器中,我得到404。
nginx错误日志显示找不到/opt/nginx/html/static/.well-known/acme-challenge/test.json
。
为什么nginx试图访问test.json
而不是/opt/nginx/html
中的/home/misha/rxviz-api
?
更多要点:
static
目录权限为drwxrwxr-x
http://api.rxviz.com/
答案 0 :(得分:0)
我很难确定,因为我无法测试它,但是......
我认为你的nginx设置存在问题:
location /static/ {
alias /home/misha/rxviz-api/static/;
}
将/ static附加到包含位置部分的别名,因此它会搜索/home/misha/rxviz-api/static/static
这将返回404,因为static/
static/
尝试修复:
location /static/ {
alias /home/misha/rxviz-api/;
}
.... ...
我还想提一下。 它似乎是您的节点服务器(使用restify)按照您的需要提供内容(127.0.0.1:4010/static / ...按照您的说法工作), 但请注意,nginx无论如何都不会将任何/ static调用重定向到您的节点,因此您的节点restify未被使用。
为什么?
本节:
location /static/ {
alias /home/misha/rxviz-api/static/;
}
告诉nginx不要将这些/静态调用重定向到您的节点服务,而是尝试从本地路径中查找并提供该文件。
所以,如果您想要使用解决方案......只需删除整个location /static
部分,您的节点也会提供这些文件。