Маршрут прокси-сервера к неверному URL - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь заставить работать http-proxy-middleware. Я пытаюсь запустить несколько приложений nodejs, а затем прокси-приложение в качестве обратного прокси-сервера.

Проблема, с которой я сталкиваюсь:когда я нажимаю ссылку в прокси-приложении, вот мой код:

var express = require('express')
var proxy = require('http-proxy-middleware')
var app = express()

var options = {
    target: 'http://localhost:1001', // target host
    changeOrigin: true, // needed for virtual hosted sites
    ws: false, // proxy websockets
    logLevel: "debug",
    pathRewrite: {
        '^/foo': '/', // rewrite path
    }
}
var exampleProxy = proxy(options)

app.use('/foo', exampleProxy)
app.listen(3000)

В приложении localhost: 1001 я получил маршруты '/' и '/ bar'

app.get('/', function (req, res) {
    res.render('home');
});

app.get('/bar', function (req, res) {
    res.render('bar');
});

Если я перейду к localhost: 3000 / foo, он перенаправит меня на localhost: 1001 / (показывая localhost: 3000 / в браузере) и то же самое с localhost: 3000 / foo / bar.Так что это работает нормально.

Проблема возникает, когда я захожу на localhost: 3000 / foo и затем нажимаю ссылку на 'bar', затем он направляет меня на localhost: 3000 / bar, который не является маршрутом Iопределил в моем прокси-сервере.

Итак, мне нужно, чтобы при нажатии на ссылку на / bar он направлял ее к / foo / bar в прокси.

Я пыталсяпридумали несколько способов исправить это, но (очевидно) не увенчались успехом:

Добавьте порт (1001) в ответ (res.locals.portNo = "1001") и затем отправьте его взапрос, чтобы прокси мог проверить, откуда поступил запрос, и добавить / foo (если его 1001).(Я еще не пробовал, но, может быть, этого можно достичь с помощью файлов cookie?)

1 Ответ

0 голосов
/ 05 апреля 2019

Я получил это работает, но это очень плохой взлом ... Но это работает ...

Я добавил cookie-парсер

var cookieParser = require('cookie-parser')
app.use(cookieParser())

А потом я добавил это уродливое промежуточное ПО

app.use(function (req, res, next) {
    var domainLetter = req.cookies.domainLetter

    switch (req.url.substring(0, 2)) {
        case "/a": {
            domainLetter = 'a'
            res.cookie('domainLetter', 'a')
            break
        }
        case "/b": {
            domainLetter = 'b'
            res.cookie('domainLetter', 'b')
            break
        }
        default: {
            break
        }
    }

    if (req.url.length != 2 || req.url.substring(0, 2) != '/' + domainLetter)
        req.url = '/' + domainLetter + req.url
    next()
})

Итак, когда я хочу использовать прокси для localhost: 1001, я перехожу на localhost: 3000 / a (или localhost: 3000 / a / ****), тогда он сохраняет cookie с свойство "domainLetter" со значением "a", затем, когда я нажимаю на ссылку на этом веб-сайте, к этому URL добавляется "/ a" (localhost: 3000 / test становится localhost: 3000 / a / test и т. д.)

...