Re: Пользовательская переменная между секциями server
sunrules
nginx-forum на forum.nginx.org
Пн Сен 12 10:37:52 UTC 2022
Всем спасибо за помощь, Ваши советы реально помогли с моей задачей,
конфигурация все-таки заработала.
Выкладываю пример, может кому-то пригодится:
#-----------------------------------------------
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;
}
....
#--------------------------------
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,295146,295175#msg-295175
Подробная информация о списке рассылки nginx-ru