express和nginx - 加载html文件但不能提供资产

时间:2017-05-10 19:38:55

标签: express nginx

我试图在端口3000上运行快速服务器。当我访问我的服务器的IP时,我能够加载html页面,但它没有似乎能够找到资产(具有我链接到的.js和.css文件 - 这与public内的index.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 个答案:

答案 0 :(得分:1)

在你的nginx配置中,

try_files $uri $uri/ =404;

意味着nginx将尝试在根文件夹中查找静态资源,然后在最后使用/进行尝试,如果它还没有找到任何内容,则会发出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;
    }
}

现在,它将在根文件夹中查找静态文件,然后将其传递给节点服务器。