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