Как можно развернуть приложение 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