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