В моем приложении есть некоторые сервисы, и я обрабатываю их с помощью обратного прокси-сервера redbird . Мой обратный прокси index.js
выглядит следующим образом:
import redbird from 'redbird';
import { HOST_URI = 'localhost, REVERSE_PROXY_PORT = 5470 } from './environment';
const proxy = redbird({ port: REVERSE_PROXY_PORT });
console.log({ HOST_URI });
proxy.register(`${HOST_URI}/sso`, `http://${HOST_URI}:8000`); // <--
proxy.register(`${HOST_URI}/sign-in`, `http://${HOST_URI}:8050/sign-in`);
proxy.register(`${HOST_URI}/api`, `http://${HOST_URI}:4000/api`);
proxy.register(`${HOST_URI}/`, `http://${HOST_URI}:3000`);
Я указал один URL, потому что мне интересно, почему он работает так:
localhost:5470/sso
- отображаетмне страницу клиента. Вкладка браузера имеет заголовок http://${HOST_URI}:8000
, но содержимое неверно (отображается содержимое от клиента). localhost:5470/sso/
- косая черта в конце имеет значение (отображает содержимое из sso), итогда работает как надо, но почему?
Взгляните ...
Не знаю, важно ли это в этом случае, но я будуОтметим, что client
и SSO
имеют почти одинаковые static-server.js
для обслуживания статического файла.
import express from 'express';
import fs from 'fs';
const { CLIENT_PORT, NODE_ENV, HOST_URI } = process.env;
console.log('STATIC-SERVER:');
console.log({ CLIENT_PORT, NODE_ENV, HOST_URI });
const config = { CLIENT_PORT, NODE_ENV, HOST_URI };
const app = express();
app.use(express.static('./dist'));
const ejs = fs.readFileSync('./dist/index.ejs', 'utf8');
const INJECT_TAG = '<!-- ENVIRONMENT -->';
const environmentScript = config =>
`<script>window.process = { env: ${JSON.stringify(config)} };</script>`;
const template = config => ejs.replace(INJECT_TAG, environmentScript(config));
app.get('*', (_, res) => {
const body = template(config);
res.send(200, body);
});
app.listen(CLIENT_PORT, () => {
console.log('Client static server is running on Port: ' + CLIENT_PORT);
});
Весь Github-репо и запрос на извлечение для этого проекта.