Выносите эти условия в 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
>
_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-leave@nginx.org