Рейтинг:0

Одно и то же имя_сервера с разными приложениями, подключенными как отдельные блоки местоположения в nginx.

флаг bq
s.k

Можно ли «подключить» разные веб-сервисы (предоставленные из разных контейнеров докеров) на один и тот же сервер nginx?

Вот простой пример, чтобы получить общее представление:

сервер {
    слушать 80;
    слушать [::]:80;

    client_max_body_size 10M;
    кодировка utf-8;

    имя_сервера my.server.org;

    журнал_доступа /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;

    место расположения / {
        включить proxy_params;
        прокси_пароль http://127.0.0.1:8081/;
    }
    местоположение /статическое/ {
        включить proxy_params;
        включить /etc/nginx/mime.types;
        псевдоним /var/www/app/static/;
    }
    местоположение ^~ /app2/ {
        включить proxy_params;
        прокси_пароль http://127.0.0.1:8082;
    }
    местоположение ^~ /app3/ {
        включить proxy_params;
        прокси_перенаправление выключено;
        proxy_set_header Хост $http_host;
        прокси_пароль http://127.0.0.1:8083;
    }
}

куда место расположения / является корнем первого приложения вместе с его статическими файлами в следующем блоке местоположения.
Это первое приложение работает на http://my.server.org/.

Я хотел бы получить доступ к двум другим приложениям в http://my.server.org/app2/ и http://my.server.org/app3/ при сохранении того же имени сервера мой.server.org.
Эти приложения связаны с основным, но они полностью независимы, т. е. обслуживаются от других докер-композиций, при этом их порты выставлены соответственно на 8082 и 8083.

Возможно ли решить такую ​​простую задачу в рамках уникального сервер блокировать?

На данный момент я получил 404 при переходе к этим двум другим URL-адресам.

В основном я хочу сопоставить эти рабочие URL-адреса + порты и все их дочерние элементы с именованными местоположениями:

http://my.server.org:8081/... -> http://my.server.org/...
http://my.server.org:8082/... -> http://my.server.org/app2/...
http://my.server.org:8083/... -> http://my.server.org/app3/...

РЕДАКТИРОВАТЬ:
либо это:

    местоположение /приложение3/ {
        если ($http_referer ~ "^$схема://$http_host/app3/") {
            переписать ^/app3/(.*) $scheme://$http_host/app3/$1 редирект;
        }
        включить proxy_params;
        прокси_перенаправление выключено;
        proxy_set_header Хост $http_host;
        прокси_пароль http://127.0.0.1:8083;
    }

или это:

    расположение ~*/app3/(.*)$ {
        включить proxy_params;
        прокси_перенаправление выключено;
        proxy_set_header Хост $http_host;
        прокси_пароль http://127.0.0.1:8083/$1;
    }

"работают" одинаково, но все же не идеально, потому что осталось две проблемы:

  1. обслуживается только необработанный HTML (например, без стилей: например, «502 bad gateway» в файлах css)
  2. ссылки внутри страниц указывают, например. http://my.server.org/subfeature/subitem вместо http://my.server.org/app3/subfeature/subitem. Следовательно, им «не хватает» /приложение3 префикс, и я не знаю, как его добавить, если его нет там, где он должен быть.
Рейтинг:0
флаг za

Это типичная задача, но вы забыли две вещи:

  • гуглите ваш вопрос.
  • добавление переписать статьи в каждом из место расположения {} блоки.
s.k avatar
флаг bq
s.k
Проблема в том, что файлы статики автоматически обслуживаются на корневом уровне без префикса `/app3`, поэтому, поскольку они не «знают» об этом местоположении внутри контейнера докеров, из которого они происходят, они никогда не войдут в этот ` Блок местоположения /app3` и их путь поиска по умолчанию будут такими же, как у nginx. Не знаю, типовая ли задача, но в nginx не решаемая. :/

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.