Re: Можно ли заскриптовать несложную логику прямо в конфиге?

Serge Negodyuck serg на petrovich.kiev.ua
Пт Апр 28 20:16:51 UTC 2017


Примеры ниже дают только идею реализации, детали реализации нужно
проработать.

Вариант 1.

map $http_host $backend {
  NNN1.example.com    IP_ADDR_FOR_NNN1/;
  NNN2.example.com    IP_ADDR_FOR_NNN2/;

}
...
proxy_pass http://$backend

Вариант 2.

Свой сервис который выдает X-Accel-Redirect: /use_host/IP_ADDR_FOR_NNN


location / {
    proxy_pass http://myservice;
}

location ~* ^/use_host/(.*)$ {
  internal;
  proxy_pass    http://$1;
}



Вариант 3.

> по очень простому алгоритму вычисляется внутренний IP-адрес
Если  алгоритм можно описать регулярным выражением.

location / {
        rewrite / /use_host/$http_host;
}

location ~ ^/use_host/(\w+).example.com$ {
   internal;
   proxy_pass       http://P_ADDR_FOR_$1;
}


Вариант 4.
http://nginx.org/ru/docs/http/ngx_http_perl_module.html

Вариант 5.
https://github.com/openresty/lua-nginx-module


17 апреля 2017 г., 16:18 пользователь Alexander Simakov <xdr.box на gmail.com>
написал:

> Думаю что нет. Мне ведь не нужно балансировать нагрузку
> между несколькими бэкэндами.
>
> Требуется все запросы на определённый домен всегда
> перенаправлять на заданный IP. Таких пар "домен -> IP"
> может быть несколько десятков тысяч, при том, что нужный
> IP-адрес вычисляется  по домену одной строчкой кода.
> Вот и возник вопрос: можно ли обойтись без длинного
> и однообразного конфига.
>
>
> С уважением,
> Александр Симаков
>
> 17 апреля 2017 г., 15:48 пользователь Дмитрий Андреев <me на kemko.ru>
> написал:
>
> http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#hash - не
>> подходит?
>>
>> пн, 17 апр. 2017 г. в 14:37, Alexander Simakov <xdr.box на gmail.com>:
>>
>>> Добрый день!
>>>
>>> Подскажите, пожалуйста, как наиболее оптимальным
>>> способом решить следующую задачу:
>>>
>>> NGINX используется качестве прокси для входящих
>>> из интернета HTTPS и WebSocket-соединений.
>>>
>>> Запросы приходят на домены вида NNNN.example.com,
>>> где NNNN - некое число. Для каждого NNNN по очень
>>> простому алгоритму вычисляется внутренний IP-адрес
>>> на который нужно пробросить данное соединение.
>>>
>>> Вот пример конфигурации:
>>>
>>> ==8<==
>>> server {
>>>     listen 443;
>>>     server_name NNNN.example.com;
>>>
>>>     location / {
>>>         proxy_pass http://IP_ADDR_FOR_NNNN/;
>>>     }
>>>
>>>     location /ws/ {
>>>         proxy_pass http://IP_ADDR_FOR_NNNN/ws/;
>>>         proxy_http_version 1.1;
>>>         proxy_set_header Upgrade $http_upgrade;
>>>         proxy_set_header Connection "upgrade";
>>>     }
>>> }
>>> ==8<==
>>>
>>> Сейчас я вынужден программно генерировать большие
>>> статические файлы-портянки в которых порядка 1000
>>> таких секций.
>>>
>>> Подскажите, можно ли в данном примере как-то заскриптовать
>>> логику получения IP-адреса по NNNN и иметь один компактный
>>> и универсальный файл? Или, может, как-то предвычислить для
>>> NGINX хеш { NNNN -> IP_ADDR_FOR_NNNN } и использовать его
>>> в конфиге?
>>>
>>> Спасибо.
>>>
>>> С уважением,
>>> Александр Симаков
>>> _______________________________________________
>>> nginx-ru mailing list
>>> nginx-ru на nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru на nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20170428/1e9c0be9/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru