Рейтинг:0

nginx proxy_pass разных поддоменов в разные места в пределах одного блока сервера

флаг br
aag

Типичный способ обратного проксирования разных поддоменов в разные места с помощью Nginx — это установка уникального сервера для каждого поддомена, например:

сервер {
    имя_сервера субдомен1.example.com;
    место расположения / {
        proxy_pass http://hostname1:port1;
    }
}
сервер {
    имя_сервера субдомен2.example.com;
    место расположения / {
        proxy_pass http://hostname2:port2;
    }
}

Можно ли добиться того же результата в пределах одного блока сервера (например, имя_сервера .example.com без какого-либо указанного поддомена), указав разные местоположения в этом блоке сервера?

Рейтинг:1
флаг jp

Если вы укажете разные местоположения, это не будет таким же результатом, как и у вас. место расположения / в двоем сервер блоки.

aag avatar
флаг br
aag
спасибо, что нашли время ответить. Возможно, я двусмысленно выразился.Цель состоит в том, чтобы обратно проксировать различные субдомены, каждый из которых будет обслуживаться отдельным внутренним сервером. Вместо того, чтобы устанавливать несколько отдельных серверов nginx, что делает конфигурацию громоздкой, мне было интересно, могу ли я указать один «сервер с подстановочными знаками», который затем будет направлять запросы на правильные внутренние серверы в зависимости от запрошенных субдоменов.
флаг jp
Вы можете использовать переменную в качестве параметра proxy_pass. См. https://stackoverflow.com/questions/5743609/dynamic-proxy-pass-to-var-with-nginx-1-0.
aag avatar
флаг br
aag
Теперь я использовал переменную, но оказалось, что тогда мне нужно явно объявить правило перезаписи. Мне еще предстоит выяснить, как это сделать правильно.
Рейтинг:1
флаг us

Да, это возможно.

Во-первых, настройте карта для сопоставления доменов с proxy_pass направления:

карта $host $dest {
    www1.example.com 192.168.10.10:8001;
    www2.example.com 192.168.10.11:8002;
    по умолчанию 192.168.10.12;
}

сервер {
    имя_сервера *.example.com;

    прокси_пароль http://$dest;
}

Когда nginx получает запрос, он переходит к proxy_pass директива. Затем он решает $назначение с использованием карта, который сопоставляет различные имена виртуальных хостов с местами назначения. Затем nginx проксирует запрос, используя разрешенный пункт назначения.

Не забудьте правильно настроить место назначения по умолчанию. Каждый общедоступный веб-сервер получает запросы на все виды доменных имен. Обычно вы хотите вернуть 404 на неизвестных виртуальных хостах.

aag avatar
флаг br
aag
Обновить. Кажется, что proxy_pass к переменной требует явного правила перезаписи. Я играю с такими правилами, но я еще не понял.
флаг us
Вы пытались просто использовать другой целевой URL в «карте»? icinga.example.com 10.10.10.7/icingaweb2 в качестве строки карты? Кроме того, вам необходимо правильно настроить базовый URL-адрес в каждой конфигурации приложения.
aag avatar
флаг br
aag
если icinga.example.com сопоставлен с 10.10.10.7/icingaweb2, клиент отправляется на несуществующую страницу https://icinga.example.com/icingaweb2/authentication/login.
aag avatar
флаг br
aag
Дорогой @tero, я должен вернуться к этому. Ваше решение работает для простых переводов 1:1. Однако, например. `https://icinga.example.com` должен быть передан через proxy_pass к `http://10.10.10.7/icingaweb2`, тогда как `https://mail.example.com` должен перейти к `http://10.10.10.9 /iredmail/mail` и т. д. Кажется, я понимаю, что мне нужно определить блоки местоположения, но они не будут работать с поддоменами. У вас есть дальнейшие советы?
флаг us
Вы уверены, что правильно установили корневой URL-адрес приложения `icinga`?

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

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