Как можно развернуть приложение node.js за HAProxy?

У меня есть приложение node.js Express, работающее на компьютере machine1 через порт 3000. Я могу успешно получить доступ к своему приложению через machine1:3000

У меня HAProxy работает на machine2. Я обновил haproxy.cfg следующим образом

frontend main *:80
    acl url_mynodeapp path_beg -i /mynodeapp

    use_backend mynodeapp if url_mynodeapp

backend mynodeapp
    mode http
    reqrep ^([^\ ]*\ /)mynodeapp[/]?(.*)     \1\2
    balance roundrobin
    server machine1 1.1.1.1:3000

Теперь я могу поразить свое приложение в machine2/mynodeapp. Однако все относительные ссылки теперь не работают, включая css и javascript (поскольку они указывают на machine2 вместо machine2/mynodeapp).

Как развернуть экспресс-приложение за прокси-сервером? Как развернуть экспресс-приложение с подпапкой? Я пришел из мира java, где все веб-приложения находятся в пространстве имен внутри контейнера сервлета, что дает каждому приложению свою собственную подпапку.

Спасибо,

Натан

2 ответа

Решение

Единственное решение, которое я смог найти, - это ручная настройка приложения узла для запуска из подпапки.

Я использовал решения, представленные в разделе Как обрабатывать относительные пути в node.js / express? и вызывать функции из шаблонов ejs на узле

var subfolder = '/mynodeapp';
app.set('view engine', 'ejs');
app.use(subfolder, app.router);
app.use(subfolder, express.static(__dirname + '/public'));
app.locals.createLink = function(uri) {
    return subfolder + uri;
}

Затем в представлениях ejs создайте ссылки с помощью вызова функции createLink.

<script src="<%= createLink('/javascript/myjavascript.js') %>">
<a href="<%= createLink('/') %>">Home</a>

Теперь у меня есть приложение node.js Express, работающее на компьютере machine1:3000/mynodeapp.

Затем я могу легко направить через прокси-сервер и получить доступ к своему приложению в machine2/mynodeapp. Примечание: в конфигурации прокси просто удалите строку regrep.

/mynodeapp не поддомен. Это подпапка. Субдомен будет mynodeapp.machine2

Хостинг поддоменов прекрасно работает с Express, так как это не работа экспресса, а интерфейс.
До тех пор, пока ваш клиентский интерфейс разрешается последовательно (что происходит с поддоменами, а не с подпапками), Express будет получать ожидаемые URL-адреса от HAproxy

Другие вопросы по тегам