2017-06-14 66 views
1

我在VPS上运行node.js API,由Ubuntu 13.04上的nginx提供服务。静态文件在本地提供,但不通过nginx

我使用restify和服务静态文件是这样的:

server.get(
    /\/static\/?.*/, 
    restify.serveStatic({ 
    directory: __dirname // => /home/misha/rxviz-api 
    }) 
); 

下面是相关位nginx的配置:

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试图访问/opt/nginx/html中的test.json而不是/home/misha/rxviz-api

数点:

  • static目录的权限是drwxrwxr-x
  • 我可以在浏览器中访问http://api.rxviz.com/成功

回答

0

这是我很难肯定,因为我无法测试它,但..

我认为你有一个nginx设置的问题:

location /static/ { 
     alias /home/misha/rxviz-api/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无论如何都不会重定向任何/静态调用你的节点,所以你的节点restify是未使用的。

为什么?

本节:

location /static/ { 
     alias /home/misha/rxviz-api/static/; 
} 

告诉nginx不定向的/静态调用到您的节点服务,而是试图找到并从本地路径提供服务的文件。

所以如果你想使用restify ...只是删除整个location /static部分,你的节点也会提供这些文件。

+0

IFAIK,“root”正在追加,但“别名”不是。 (无论如何,我尝试过'alias/home/misha/rxviz-api /;',但仍然是404)。 –

+0

我也尝试从nginx配置中删除'location/static/{...}',但仍然是404。 –

+0

是否在编辑或删除后重新启动了nginx守护进程?因为很奇怪你删除了位置块,你仍然可以尝试使用404 –