2017-05-10 90 views
0

我試圖運行一個快速服務器在端口3000.當我訪問我的服務器的IP,我能夠得到HTML頁面加載,但它似乎無法找到資產(具有鏈接到的.js和.css文件 - 與public中的index.html位於同一目錄中)。我在配置中丟失了什麼嗎?快遞和nginx - 加載html文件,但不能提供資產

快速安裝

const express = require('express'); 
const path = require('path'); 
const app = express(); 

const PORT = 3000; 

app.use('*', 
    express.static(path.join(__dirname, '..', 'public', 'index.html'))); 

app.get('*', (req, res) => { 
    res.sendFile((path.join(__dirname, '..', 'public', 'index.html'))); 
}); 

app.listen(PORT,() => { 
    console.log(`Listening on http://localhost:${PORT}...`) 
}); 

nginx的設置

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    root /var/www/my_site/public; 
    index index.html index.htm index.nginx-debian.html; 

    server_name _; 

    location/{ 
     try_files $uri $uri/ =404; 
     proxy_pass http://127.0.0.1:3000; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 
+1

嘗試從express中刪除app.use和app.get來確認index.html文件是否由nginx提供。 – squgeim

回答

1

在你的nginx配置,

try_files $uri $uri/ =404; 

手段的nginx將設法找到你的Roo的靜態資源t文件夾,然後在末尾嘗試使用/,如果尚未發現任何內容,則會發出404 (Not Found)。它不會達到proxy_pass

正確的方法來配置它會是這樣:現在

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    root /var/www/my_site/public; 
    index index.html index.htm index.nginx-debian.html; 

    server_name _; 

    location/{ 
     try_files $uri $uri/ @nodejs; 
    } 

    location @nodejs { 
     proxy_pass http://127.0.0.1:3000; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 

,它會尋找你的根文件夾的靜態文件,然後把它傳遞給節點服務器。

相關問題