Всем спасибо за помощь, Ваши советы реально помогли с моей задачей, конфигурация все-таки заработала.
Выкладываю пример, может кому-то пригодится:
#-----------------------------------------------
upstream upstr_release_XXXX_X {
### Конфигурация балансировки.
.
.
.
}
### Конфигурация бэкендов, в данном случае их 3.
server {
listen unix:/tmp/nginx/nginx_release_XXXX_X.example1.org.socket;
access_log off;
location / {
resolver 8.8.8.8 valid=30s; #Если сайт внутри сети нужно указать IP intranet DNS серверов
resolver_timeout 5s;
proxy_http_version 1.1;
proxy_pass http://$backend.example1.org;
proxy_set_header Host $backend.example1.org;
}
}
server {
listen unix:/tmp/nginx/nginx_release_XXXX_X.example2.org.socket;
access_log off;
location / {
resolver 8.8.8.8 valid=30s;
resolver_timeout 5s;
proxy_http_version 1.1;
proxy_pass http://$backend.example2.org;
proxy_set_header Host $backend.example2.org;
}
}
server {
listen unix:/tmp/nginx/nginx_release_XXXX_X.example3.org.socket;
access_log off;
location / {
resolver 8.8.8.8 valid=30s;
resolver_timeout 5s;
proxy_http_version 1.1;
proxy_pass http://$backend.example3.org;
proxy_set_header Host $backend.example3.org;
}
}
#Определение префикса для подстановки его в имя сайта для бэкендов
map $http_host $backend {
default $http_host;
"~^(?<release>[a-z0-9\-\.]+)\.example\.org$" $release;
}
### Точка входа на балансере.
server {
listen example.org:80;
server_name "~^(?<release>[a-z0-9\-\.]+)\.example\.org$";
access_log /usr/local/nginx/logs/nginx_release_XXXX_X.example.org.log;
error_log /usr/local/nginx/logs/nginx_release_XXXX_X.example.org.error.log;
location / {
proxy_http_version 1.1;
proxy_pass http://upstr_release_XXXX_X/;
proxy_set_header Host $http_host;
}
}
#---------------------------------------------
На бэкендах в конфигурации тоже фильтруется префикс и в зависимости от него в локации определяется физический путь к файлам сайта.
Данная конфигурация удобна для разработки, например, если версия сайта часто обновляется, то достаточно только развернуть новую локацию на бэкендах и новый релиз сайта будет доступен, соответственно в имени сайта нужно изменить имя релиза.
Например релиз называется так: release-2022.1
В этом случае единая точка входа на балансере будет выглядеть так: release-2022.1.example.org
Локация на бэкендах будет такая: /release-2022.1
Пример конфигурации бэкенда:
#--------------------------------
server {
server_name "~(?<release>[a-z0-9\-\.]+)\.example1\.org$";
# subdomains processing
if ($release = 'trunk') {
set $root_folder trunk;
}
if ($release != 'trunk') {
set $root_folder branches/$release;
}
if (!-d /usr/local/www/site/$root_folder) {
return 404;
break;
}
....
#--------------------------------