Node.js 静态文件在本地提供,但不通过nginx提供
我在VPS上运行node.js API,由Ubuntu 13.04上的nginx提供服务 我使用和服务的静态文件如下:Node.js 静态文件在本地提供,但不通过nginx提供,node.js,ssl,nginx,lets-encrypt,restify,Node.js,Ssl,Nginx,Lets Encrypt,Restify,我在VPS上运行node.js API,由Ubuntu 13.04上的nginx提供服务 我使用和服务的静态文件如下: server.get( /\/static\/?.*/, restify.serveStatic({ directory: __dirname // => /home/misha/rxviz-api }) ); 以下是nginx config中的相关位: server { listen 80; server_name api.r
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/;
}
}
(完整配置为)
运行时:
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试图在/opt/nginx/html
中访问test.json,而不是/home/misha/rxviz api
还有几点:
static
目录权限为drwxrwxr-x
- 我可以访问
http://api.rxviz.com/
在浏览器中成功打开
我很难确定,因为我无法测试它,但是
我认为您对nginx设置有问题:
location /static/ {
alias /home/misha/rxviz-api/static/;
}
/static追加到别名中,包括位置部分,因此它搜索/home/misha/rxviz api/static/static
这将返回404,因为在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不要将这些/静态调用重定向到节点服务中,而是尝试从本地路径查找并提供文件
所以如果你想使用restify。。。只需删除整个位置/静态部分,您的节点也将提供这些文件。我很难确定,因为我无法测试它,但是
我认为您对nginx设置有问题:
location /static/ {
alias /home/misha/rxviz-api/static/;
}
/static追加到别名中,包括位置部分,因此它搜索/home/misha/rxviz api/static/static
这将返回404,因为在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不要将这些/静态调用重定向到节点服务中,而是尝试从本地路径查找并提供文件
所以如果你想使用restify。。。只需删除整个location/static
部分,您的节点也将为这些文件提供服务。IFAIK,root
正在追加,但alias
没有追加。(我尝试了alias/home/misha/rxviz-api/;
,但仍然是404)。我还尝试从nginx配置中删除location/static/{…}
,但仍然是404。编辑或删除后是否重新启动了nginx守护程序?因为很奇怪,您删除了位置块,但仍然得到404。请尝试使用root而不是alias,还可以尝试添加错误日志和访问日志,并查看日志以了解更多信息。正如您所怀疑的,它仍然可能是权限问题。如果IK,root
正在追加,但alias
没有追加。(我尝试了alias/home/misha/rxviz-api/;
,但仍然是404)。我还尝试从nginx配置中删除location/static/{…}
,但仍然是404。编辑或删除后是否重新启动了nginx守护程序?因为很奇怪,您删除了位置块,但仍然得到404。请尝试使用root而不是alias,还可以尝试添加错误日志和访问日志,并查看日志以了解更多信息。正如您所怀疑的,它仍然可能是权限问题。