<div dir="ltr"><div>Выносите эти условия в map <br></div><div>вместо<br></div><div> if ($release = 'trunk') {<br>
set $root_folder trunk;<br>
}<br>
if ($release != 'trunk') {<br>
set $root_folder branches/$release;<br>
}</div><div><br></div><div>вот так</div><div>map $release $root_folder {<br> trunk trunk;<br> default branches/$release;<br>}</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">пн, 12 сент. 2022 г. в 13:40, sunrules <<a href="mailto:nginx-forum@forum.nginx.org">nginx-forum@forum.nginx.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Всем спасибо за помощь, Ваши советы реально помогли с моей задачей,<br>
конфигурация все-таки заработала.<br>
Выкладываю пример, может кому-то пригодится:<br>
#-----------------------------------------------<br>
upstream upstr_release_XXXX_X {<br>
### Конфигурация балансировки. <br>
.<br>
.<br>
. <br>
}<br>
<br>
### Конфигурация бэкендов, в данном случае их 3.<br>
server {<br>
listen unix:/tmp/nginx/nginx_release_XXXX_X.example1.org.socket;<br>
access_log off;<br>
location / {<br>
resolver 8.8.8.8 valid=30s; #Если сайт внутри сети нужно указать IP<br>
intranet DNS серверов<br>
resolver_timeout 5s;<br>
proxy_http_version 1.1;<br>
proxy_pass http://$<a href="http://backend.example1.org" rel="noreferrer" target="_blank">backend.example1.org</a>;<br>
proxy_set_header Host $<a href="http://backend.example1.org" rel="noreferrer" target="_blank">backend.example1.org</a>;<br>
}<br>
}<br>
<br>
server {<br>
listen unix:/tmp/nginx/nginx_release_XXXX_X.example2.org.socket;<br>
access_log off;<br>
location / {<br>
resolver 8.8.8.8 valid=30s; <br>
resolver_timeout 5s;<br>
proxy_http_version 1.1;<br>
proxy_pass http://$<a href="http://backend.example2.org" rel="noreferrer" target="_blank">backend.example2.org</a>;<br>
proxy_set_header Host $<a href="http://backend.example2.org" rel="noreferrer" target="_blank">backend.example2.org</a>;<br>
}<br>
}<br>
<br>
server {<br>
listen unix:/tmp/nginx/nginx_release_XXXX_X.example3.org.socket;<br>
access_log off;<br>
location / {<br>
resolver 8.8.8.8 valid=30s; <br>
resolver_timeout 5s;<br>
proxy_http_version 1.1;<br>
proxy_pass http://$<a href="http://backend.example3.org" rel="noreferrer" target="_blank">backend.example3.org</a>;<br>
proxy_set_header Host $<a href="http://backend.example3.org" rel="noreferrer" target="_blank">backend.example3.org</a>;<br>
}<br>
}<br>
<br>
#Определение префикса для подстановки его в имя сайта для бэкендов<br>
map $http_host $backend {<br>
default $http_host;<br>
"~^(?<release>[a-z0-9\-\.]+)\.example\.org$" $release;<br>
}<br>
<br>
### Точка входа на балансере.<br>
server {<br>
listen <a href="http://example.org:80" rel="noreferrer" target="_blank">example.org:80</a>;<br>
server_name "~^(?<release>[a-z0-9\-\.]+)\.example\.org$";<br>
<br>
access_log /usr/local/nginx/logs/nginx_<a href="http://release_XXXX_X.example.org" target="_blank">release_XXXX_X.example.org</a>.log;<br>
error_log <br>
/usr/local/nginx/logs/nginx_<a href="http://release_XXXX_X.example.org" target="_blank">release_XXXX_X.example.org</a>.error.log;<br>
<br>
location / {<br>
proxy_http_version 1.1;<br>
proxy_pass <a href="http://upstr_release_XXXX_X/" rel="noreferrer" target="_blank">http://upstr_release_XXXX_X/</a>;<br>
proxy_set_header Host $http_host;<br>
}<br>
}<br>
#---------------------------------------------<br>
<br>
На бэкендах в конфигурации тоже фильтруется префикс и в зависимости от него<br>
в локации определяется физический путь к файлам сайта.<br>
Данная конфигурация удобна для разработки, например, если версия сайта часто<br>
обновляется, то достаточно только развернуть новую локацию на бэкендах и<br>
новый релиз сайта будет доступен, соответственно в имени сайта нужно<br>
изменить имя релиза.<br>
Например релиз называется так: release-2022.1<br>
В этом случае единая точка входа на балансере будет выглядеть так:<br>
<a href="http://release-2022.1.example.org" rel="noreferrer" target="_blank">release-2022.1.example.org</a><br>
Локация на бэкендах будет такая: /release-2022.1<br>
<br>
Пример конфигурации бэкенда:<br>
#--------------------------------<br>
server {<br>
server_name "~(?<release>[a-z0-9\-\.]+)\.example1\.org$";<br>
<br>
# subdomains processing<br>
if ($release = 'trunk') {<br>
set $root_folder trunk;<br>
}<br>
if ($release != 'trunk') {<br>
set $root_folder branches/$release;<br>
}<br>
<br>
if (!-d /usr/local/www/site/$root_folder) {<br>
return 404;<br>
break;<br>
}<br>
....<br>
#--------------------------------<br>
<br>
Posted at Nginx Forum: <a href="https://forum.nginx.org/read.php?21,295146,295175#msg-295175" rel="noreferrer" target="_blank">https://forum.nginx.org/read.php?21,295146,295175#msg-295175</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list -- <a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-ru-leave@nginx.org" target="_blank">nginx-ru-leave@nginx.org</a><br>
</blockquote></div>