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

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

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

      server {
    listen 80;
    listen [::]:80;

    client_max_body_size 10M;
    charset utf-8;

    server_name my.server.org;

    access_log /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8081/;
    }
    location /static/ {
        include proxy_params;
        include /etc/nginx/mime.types;
        alias /var/www/app/static/;
    }
    location ^~ /app2/ {
        include proxy_params;
        proxy_pass http://127.0.0.1:8082;
    }
    location ^~ /app3/ {
        include proxy_params;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8083;
    }
}

гдеявляется корнем первого приложения вместе с его статическими файлами в следующем блоке местоположения.
Это первое приложение работает по адресу http://my.server.org/ .http://my.server.org:8081/.. . -> <ahref="http: .."="" my.server.org="" rel="nofollow noopener noreferrer">http://my.server.org/.. . <br/> <ahref="http: .."="" my.server.org:8082="" rel="nofollow noopener noreferrer">http://my.server.org:8082/.. . -> <ahref="http: .."="" app2="" my.server.org="" rel="nofollow noopener noreferrer">http://my.server.org/app2/.. . <br/> <ahref="http: .."="" my.server.org:8083="" rel="nofollow noopener noreferrer">http://my.server.org:8083/.. . -> <ahref="http: .."="" app3="" my.server.org="" rel="nofollow noopener noreferrer">http://my.server.org/app3/.. .</ahref="http:></ahref="http:></ahref="http:></ahref="http:></ahref="http:>http://my.server.org/app2/ и <ahref="http: "="" app3="" my.server.org="" rel="nofollow noopener noreferrer">http://my.server.org/app3/ , сохраняя при этом то же имя сервера.<tcodeid="6425">. <br/>Эти приложения связаны с основным, но они полностью независимы, т.е. обслуживаются из других композиций докеров, причем их порты открыты соответственно по адресам 8082 и 8083.</tcodeid="6425"></ahref="http:>

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

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

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

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

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

          location /app3/ {
        if ($http_referer ~ "^$scheme://$http_host/app3/") {
            rewrite ^/app3/(.*) $scheme://$http_host/app3/$1 redirect;
        }
        include proxy_params;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8083;
    }

или это:

          location ~*/app3/(.*)$ {
        include proxy_params;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8083/$1;
    }

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

  1. обслуживается только необработанный HTML (например, без стилей: например, «502 плохой шлюз» в файлах CSS)
  2. ссылки внутри страниц указывают, например,вместо. Следовательно, им «не хватает»префикс, и я не знаю, как его добавить, если его нет там, где он должен быть на самом деле.

1 ответ

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

  • погуглите свой вопрос.
  • добавлениепункты в каждом изблоки.
Другие вопросы по тегам