【发布时间】:2019-10-21 20:26:32
【问题描述】:
我有一个域,因此需要通过 nginx 反向代理为在两个不同节点服务器上运行的两个不同的 react 应用程序提供服务。这是我的 nginx.conf 文件
server {
listen 80;
listen [::]:80;
client_max_body_size 128g; # allows larger files (like videos) to be uploaded.
location / {
proxy_pass http://192.168.0.105:8081;
}
location /admin {
proxy_pass http://192.168.0.105:8080;
}
}
我在这里想要实现的是,如果用户登陆 abc.com,那么他将从 http://192.168.0.105:8081 获得响应应用程序,而如果用户访问 abc.com/admin,他将获得 http://192.168.0.105:8080。
两个应用程序都有不同的节点服务器为由 create-react-app 创建的 react 包提供服务。对于两个应用程序,节点的 server.js 看起来都是这样的
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const cors = require("cors");
const app = express();
const qs = require("querystring");
const axios = require("axios");
const PORT = process.env.PORT || 8080;
const serverEnvironment = process.env.serverEnv || "dev";
app.use(cors());
app.use(express.static(path.join(__dirname, "build")));
app.use(bodyParser.json());
app.get("*", function(req, res) {
console.log("Requesting Admin UI");
res.sendFile(path.join(__dirname, "build", "index.html"));
});
app.listen(PORT, () => {
console.log(
`\nServer is being served in ${serverEnvironment} environment at port ${PORT}`
);
});
当我访问 localhost:4000(4000 是运行 nginx 的端口)时,一切正常,它为我提供了预期的门户。但是当我访问 localhost:4000/admin 而不是提供管理应用程序时,它最终会给出以下错误
Uncaught SyntaxError: Unexpected token '<' 2.0f3deea8.chunk.js:1
Uncaught SyntaxError: Unexpected token '<' main.a2e30dbb.chunk.js:1
当我检查网络选项卡时,所有 js 和 css 块都返回 HTML 而不是相关的 js 或 css。
我也试过添加
location ~ .(static)/(js|css|media)/(.+)$ {
try_files $uri $uri/ /$1/$2/$3;
}
到 nginx.conf 但没有用。我在这里遗漏了什么,或者它不是反向代理 2 应用程序的正确方法吗?
【问题讨论】:
标签: node.js reactjs nginx create-react-app nginx-reverse-proxy