Welcome! Log In Create A New Profile

Advanced

Re: Пользовательская переменная между секциями server

September 12, 2022 06:37AM
Всем спасибо за помощь, Ваши советы реально помогли с моей задачей, конфигурация все-таки заработала.
Выкладываю пример, может кому-то пригодится:
#-----------------------------------------------
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;
}
....
#--------------------------------
Subject Author Posted

Пользовательская переменная между секциями server

sunrules September 08, 2022 05:47AM

Re: Пользовательская переменная между секциями server

raven_kg@megaline.kg September 08, 2022 05:58AM

Re: Пользовательская переменная между секциями server

sunrules September 09, 2022 03:46AM

Re: Пользовательская переменная между секциями server

Maxim Dounin September 10, 2022 01:18PM

Re: Пользовательская переменная между секциями server

sunrules September 12, 2022 06:37AM

Re: Пользовательская переменная между секциями server

Maxim K September 12, 2022 08:08AM

Re: Пользовательская переменная между секциями server

sunrules September 12, 2022 09:11AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 248
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready