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

Maxim K rogat1y на gmail.com
Пн Сен 12 12:06:35 UTC 2022


Выносите эти условия в map
вместо
    if ($release = 'trunk') {
        set $root_folder trunk;
    }
    if ($release != 'trunk') {
        set $root_folder branches/$release;
    }

вот так
map $release $root_folder {
    trunk trunk;
    default branches/$release;
}

пн, 12 сент. 2022 г. в 13:40, sunrules <nginx-forum на forum.nginx.org>:

> Всем спасибо за помощь, Ваши советы реально помогли с моей задачей,
> конфигурация все-таки заработала.
> Выкладываю пример, может кому-то пригодится:
> #-----------------------------------------------
> 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 mailing list -- nginx-ru на nginx.org
> To unsubscribe send an email to nginx-ru-leave на nginx.org
>
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20220912/e91f0418/attachment.htm>


Подробная информация о списке рассылки nginx-ru