2017-06-14 67 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 –