Pavel Nakonechnyy

Reverse proxy: как запустить несколько сайтов на одном сервере

Опубликовано by Pavel Nakonechnyy on (изменено: ) в Web development.

Как в два файла Node.js сделать простейший reverse proxy, который будет слушать 80 порт и перенаправлять трафик на нужный вам http-сервер другого порта в зависимости от домена.

Index.ts:

import * as express from "express";
import httpProxy = require("http-proxy");

const app = express();
const port = 80;

const proxy = httpProxy.createProxyServer({});

app.use((req, res, next) =>
{
    console.log(req.method + " " + req.headers.host + req.url);
    next();
});

// tslint:disable-next-line: no-var-requires
const config = require("../config.json") as any;

app.use((req, res) =>
{
    for (const domain in config) {
        if (!config.hasOwnProperty(domain)) {
            continue;
        }

        if (req.headers.host === domain) {
            try {
                proxy.web(req, res, {
                    target: config[domain]
                });
            }
            catch (e) {
                console.error(e);
            }
            return;
        }
    }

    res.header(404).send("NO SUCH SITE");
});

Config.json:

{
    "sneakbug8.ru": "http://127.0.0.1:1010",
    "finance.sneakbug8.ru": "http://localhost:1020"
}

app.listen(port, () => console.log(`Reverse proxy listening on port ${port}!`));
359