Hello! On Tue, Mar 19, 2019 at 06:30:34PM +0300, Иван wrote:
> Есть необходимость выбирать апстрим для проксирования на основании > информации из mysql-базы. Есть мысль задействовать для этого DNS-сервер > с поддержкой mysql в бэкэнде (и A\AAAA записи с небольшим, порядка 30-60 > секунд TTL), например, powerdns и nginx примерно в такой конфигурации: > > Пусть DNS отвечает на 127.0.1.1:53 . У него бэкэнд в мускуле, в котором > сотни A\AAAA записей вида > > user1.room1.example.com -> 1.1.1.1 > > user2.room1.example.com -> 1.10.1.2 > > user3.room2.example.com -> 1.200.1.100 > > и т.п. > > которые (записи) периодически (раз в несколько часов) обновляет наше ПО. > > > В nginx на прокси примерно такая конфигурация: > > location ~ ^/user/(?<room>\w+)/(?<user>\w+)$ { > > resolver 127.0.1.1; > > proxy_pass http://$user.$room.example.com; > > } > > Будет ли в такой конфигурации запрос вида GET /user/room2/user3 к прокси > уходить на 1.200.1.100, а GET /user/room1/user2 к прокси уходить на > 1.10.1.2, Будет. > Когда я последний раз думал над этой схемой, мне казалось, что тут > что-то доступно только в коммерческой подписке. В коммерческой подписке из сколько-нибудь имеющего отношения к резолвингу имён - параметр resolve у директивы server в блоке upstream[1]. Но он не про то, что вам нужно, а про то, чтобы одно и то же имя сервера в блоке upstream периодически обновлять в соответствии с текущим состояние DNS. Простой резолвинг имён, заданных переменными, есть в nginx начиная с 0.6.18, и коммерческой подписки не требует. [1] http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#resolve -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru