08.09.2022 15:47, sunrules пишет:
Существует Nginx балансер в нем прописаны несколько бэкендов.
На бэках находятся сайты, к которым можно обратиться, указав в части url
определенную аббревиатуру. По сути, это отдельные сайты со своими
собственными именами.
Задача, на балансере нужно настроить возможность отправлять запрос на нужный
сайт бэкенда в зависимости от получаемого url.
В моей конфигурации есть проблема, я пытаюсь задать пользовательскую
переменную в Nginx на балансере, которая содержит в себе эту аббревиатуру
(которую нужно использовать в url для бэков) в одной секции server и
передать ее в другую секцию server, все это в одном конфигурационном файле.
На мой взгляд данное решение самое простое, но похоже такой способ в Nginx
не работает. В итоге переменная ничего не отдает, то есть данные из секции в
секцию не передаются.
В логах: http://.site.back1.example.org

### Balancing
server {
   listen 80;
   server_name "~(?<release>[a-z0-9\-\.]+)\.site\.example\.org$";
   set $site_release $release;
   location / {
     proxy_http_version 1.1;
     proxy_pass http://upstr_release_site_XXXX_X/;
   }
}

### Backend
server {
   listen unix:/tmp/nginx/nginx_release_XXXX_X.site.back1.socket;
   access_log off;
   location / {
     proxy_http_version 1.1;
     proxy_pass http://$site_release.site.back1.example.org/;
   }
}
Подскажите пожалуйста, какое решение можно применить в данном случае?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,295146,295146#msg-295146

_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org

Я бы покурил в сторону map. Пример с коленки, не уверен в 100% работоспособности, но я бы опробовал что-то типа:

map $host $backend {

    default localhost;

     "~(?<release>[a-z0-9\-\.]+)\.site\.example\.org$" $release.site.back1.example.org/;

}

...

proxy_pass http://$upstream;

_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org

Ответить