Перенаправление поддоменов с использованием proxy pass
Всем привет! Не могу разобраться, как правильно настроить работу динамических поддоменов с Nginx.
Представим, что у меня есть огромное кол-во поддоменов, заранее не известны их названия. Фронт работает на Next.js (например на порту 3000). Все запросы, которые поступают на адрес типа abc.domain.com/test необходимо направлять на domain.com/abc/test. В этом примере abc это slug, который является именем поддомена, test это путь, который необходимо обработать. Вот еще некоторые примеры: abc1.domain.com/a/b/c --> domain.com/abc1/a/b/c, abc2.domain.com --> domain.com/abc2 и так далее. Пользователь не должен видеть прямой путь, должен постоянно находиться на поддомене.
Пробовал вот так:
server {
listen 80;
server_name ~^(.*)\.domain\.com$;
location / {
proxy_pass http://host.docker.internal:3000/;
proxy_set_header Host $host;
}
}
Но это работает только для прямых запросов abc.domain.com/ -- открывает domain.com/
Буду рад любым комментариям!
Ответы (1 шт):
Можно из поддомена получить первый сегмент, а затем реврайтить на нужный URL.
http {
# Мапим поддомен и префикс
map $host $prefix {
"~^([^.]+)\.domain\.com" /$1;
}
server {
# Добавляем префикс к URL
rewrite ^(.*)$ $prefix$1 last;
location / {
proxy_pass ... ;
}
}
}