2017-05-10 56 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; 
    } 
} 

,它会寻找你的根文件夹的静态文件,然后把它传递给节点服务器。

相关问题