静态文件在本地提供,但不通过nginx提供

时间:2017-06-14 07:29:28

标签: node.js ssl nginx lets-encrypt restify

我在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/

1 个答案:

答案 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部分,您的节点也会提供这些文件。