Назад | Перейти на главную страницу

Обратный прокси-сервер Nginx превращает корневое веб-приложение в настраиваемый путь

Я пытаюсь настроить несколько docker контейнеры с одним и тем же изображением на одном компьютере и размещение всего приложения в одном домене, разделенных путем. Цель состоит в том, чтобы изолировать каждого клиента в его собственном контейнере. т.е. mydomain.com/aaa, mydomain.com/bbb ... и т.д.

я использую nginx в качестве обратного прокси и следовал различным примерам в Интернете. Моя конфигурация nginx выглядит так:

server {
    listen       ...;
    ...
    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    location /aaa {
        proxy_pass http://127.0.0.1:8181;
    }

    location /bbb {
        proxy_pass http://127.0.0.1:8282;
    }
    ...
}

Я заметил, что приложение будет размещено в корне / которые в настоящее время заканчиваются на 404. Есть ли умный способ переписать их на свой собственный путь на основе источника запроса без изменения самого приложения?

Я знаю, что может быть проще использовать поддомен, но я не хочу добавлять и удалять поддомен по мере того, как клиенты приходят и уходят.

Простой ответ - нет.

Вы должны рассмотреть как минимум три аспекта принуждения приложения к удалению от корня.

  • Сопоставление корневых URL-адресов с новым местоположением - что легко с proxy_pass или rewrite
  • Отображение ответов перенаправления (301, 302 и т. Д.) - что легко с proxy_redirect
  • Сопоставление URL-адресов ресурсов и встроенных гиперссылок

Последний пункт непростой. Приложения, которые ожидают, что они будут жить в корне, обычно обращаются к своим ресурсам относительно корня, что означает, что они попадают в неправильное место на обратном прокси.

В Apache есть модуль, который может перезаписывать URL-адреса, встроенные в документ HTML, но мне это кажется неэффективным.

Предпочтительным решением является изменение приложения, чтобы сделать его URL-адреса ресурсов и гиперссылок относительным путем или с префиксом одного и того же настраиваемого пути.

Я пытаюсь выполнить ту же настройку, поэтому столкнулся с той же проблемой. Мне кажется, что на самом деле нужно изменить серверные приложения, как это описывает Ричард Смит. Использование других «внешних» портов для nginx - это обходной путь, но не изящный.