javascript - NginX 代理 Nodejs/Express - 静态文件上的 404

标签 javascript node.js express nginx

我有一个 NginX 设置,它从/var/www 的根目录提供一个 php 网站,并在我的服务器上的特定子目录上代理 Nodejs/Express。以下是 server{} block 内 /etc/nginx/sites-enabled/default 中 Nodejs 的相关配置:

location /subdir/ {
    proxy_pass http://localhost:8000;
    proxy_redirect off;
    proxy_http_version 1.1
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_cache_bypass $http_upgrade;
}

这是我的 Nodejs 应用程序的代码:

var port = 8000;
var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app).listen(port);
var io = require('socket.io').listen(server);

app.use(express.static(__dirname + '/site'));
app.get('/subdir/', function(req, res) {
    res.sendFile(__dirname + '/site/index.html');
});

server.listen(port, function() {
    console.log("Listening on port " + port + "...");
});

io.on('connection', function(socket) {
    console.log("A user connected");
});

在大多数情况下,一切正常,当我通过 http://server/subdir/ 访问我的服务器时,我得到了我期望的 index.html 文件。但是,我在其他静态内容上收到 404 错误,例如 http://server/subdir/css/main.css 404 (Not Found)Cannot GET/sudir/css/main .css 当我在浏览器中直接访问文件时出现错误,即使该文件存在。

为什么 Node/Express 找不到我的静态内容?

或者,我怎样才能让 NginX 为我的静态内容提供服务?我什至尝试在 location/subdir/{} block 中添加一个 root 语句以指向 Node/Express 项目目录,但我仍然收到 404 错误。

最佳答案

如果你想通过不同的路由访问静态文件,将路由作为第一个参数传递:

您可以使用 app.use('/static', express.static(__dirname + '/public'));

并且 GET 到 http://server/static/css/main.css 将提供 main.css

此外,如果您想通过 nginx 提供静态文件,这篇文章是一个不错的开始: USING NGINX TO AVOID NODE.JS LOAD

关于javascript - NginX 代理 Nodejs/Express - 静态文件上的 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27700464/

相关文章:

mysql - 我只是找不到这个 MySQL "Exists()"错误的合适解决方案

javascript - Node 路由

javascript - 处理快速异步中间件中的错误

node.js - 在 Node.js 中存储敏感凭据的最佳方式是什么?

javascript - 为什么设置输入宽度与内容不完全匹配?

javascript - 如何使用 jQuery 通过数组显示 JSON 对象

javascript - ExpressJS 响应中间件

javascript - 在 Datepicker 中,为什么不突出显示默认日期?

node.js - 如何使 Node 抛出 UnhandledPromiseRejectionWarning 错误

angularjs - 使用node.js和socket.io进行套接字身份验证(使用DaftMonk的generator-angular-fullstack)