首页 文章

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

提问于
浏览
2

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

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文件 . 但是,当我直接访问浏览器中的文件时,即使文件存在,我在其他静态内容(如 http://server/subdir/css/main.css 404 (Not Found)Cannot GET /sudir/css/main.css 错误)上也会收到404错误 .

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

或者,我如何让NginX提供静态内容?我甚至尝试在 location /subdir/ {} 块中添加一个 root 语句来指向Node / Express项目目录但仍然遇到404错误 .

1 回答

  • 1

    如果要通过其他路由访问静态文件,请将路由作为第一个参数传递:

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

    http://server/static/css/main.css 的GET将服务于main.css

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

相关问题