配置 Nginx 和 Express 以正确提供静态文件

问题描述 投票:0回答:1

我目前有一个 django 项目已经在服务器上运行。直接在

https://server.com
供应。 Django 应用程序运行得非常好。 我想添加一个 Node.js Web 应用程序以在
https://server.com/nodeapp
处提供服务。

我有以下 nginx 配置:

server {
    server_name server.com;

    location / {
            proxy_pass http://unix:/run/gunicorn.sock;
    }

    location /static {
            expires -1;
            alias /home/user/django/static;
    }

    location /nodeapp {
            proxy_pass http://localhost:8001/;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

我的Node应用程序使用Express和Parcel,以及服务器index.js文件:

import express from 'express';

const app = express()
const port = 8001
const __dirname = import.meta.dirname;

app.use('/', express.static('dist'));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    next();
});

app.listen(port, () => {
    console.log(`Listening on port ${port}`)
})

Parcel 正在 dist 文件夹中正确构建应用程序。当我连接到

https://server.com/nodeapp
时,我可以访问根 index.html 文件,但无法找到我的所有静态文件,因为它们正在查看
https://server.com/
而不是
https://server.com/nodeapp
。我想我需要以某种方式配置 Nginx,但我不知道如何配置。

node.js express nginx
1个回答
0
投票

问题是您编写了一些客户端代码(您尚未共享),这些代码假设它将部署到路径

/

然后您已将其部署到路径

/nodeapp

现在客户端代码中的所有 URL 都要求

/something
,但服务器找不到它们,因为它们位于
/nodeapp/something
,并且返回 404 错误。


您可以采取多种不同的方法来解决此问题,但由于您已经部署了另一个代理到

/
,因此可供选择的最佳方法可能是

  • 更改您使用 Parcel 构建的客户端代码中的所有 URL,以在其 URL 中包含
    /nodeapp
    (您可以查看使用构建时环境变量来确定这一点)
  • 将您部署的 URL 更改为
    /
    位于不同的主机名上(例如,通过 虚拟名称托管在同一服务器上托管的子域)
© www.soinside.com 2019 - 2024. All rights reserved.