我目前有一个 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,但我不知道如何配置。
问题是您编写了一些客户端代码(您尚未共享),这些代码假设它将部署到路径
/
。
然后您已将其部署到路径
/nodeapp
。
现在客户端代码中的所有 URL 都要求
/something
,但服务器找不到它们,因为它们位于 /nodeapp/something
,并且返回 404 错误。
您可以采取多种不同的方法来解决此问题,但由于您已经部署了另一个代理到
/
,因此可供选择的最佳方法可能是
/nodeapp
(您可以查看使用构建时环境变量来确定这一点)/
位于不同的主机名上(例如,通过 虚拟名称托管在同一服务器上托管的子域)