Re: Вопрос по модулю stream - хочу проксировать TCP в UDP
Pavel Odintsov
pavel.odintsov на gmail.com
Ср Июл 6 18:02:20 UTC 2016
Тут вопрос сложный. Конкретно мне от TCP нужна возможность принять от
клиента не более XX байт запроса, передать их бэкэнду, забрать его
ответ и раздать клиенту по TCP. Мне нужен spoon feeding в чистом виде.
Если клиент прислал запрос по TCP больше, чем 65к (сколько предельно
лезет в UDP) вполне разумно ожидать, что в этом случае он будет
дропнут.
2016-07-06 19:26 GMT+03:00 Konstantin Tokarev <annulen на yandex.ru>:
>
>
> 06.07.2016, 17:48, "Pavel Odintsov" <pavel.odintsov на gmail.com>:
>> Очень жаль, но технических преград получается этому нету?
>
> Протоколы, основанные на UDP, часто зависят от того, что каждая датаграмма содержит независимое сообщение. Примитивное преобразование TCP -> UDP, которое можно было бы сделать в универсальном сервере вроде Nginx, будет разбивать непрерывный TCP-поток на датаграммы произвольным образом. Если этот вариант устраивает, тогда технических препятствий действительно нет. В противном случае в nginx придется реализовать отдельный протокол для пересылки датаграмм через TCP, а это уже более серьезная доработка
>
>> Вопрос сугубо в том, что нет опции для поддержки этой фичи?
>>
>> On Wednesday, 6 July 2016, Roman Arutyunyan <arut на nginx.com> wrote:
>>> Добрый день,
>>>
>>> On Wed, Jul 06, 2016 at 04:55:38PM +0300, Pavel Odintsov wrote:
>>>> Всем привет!
>>>>
>>>> Очень нравится модуль stream - прекрасная фишка ;)
>>>>
>>>> Но захотелось немного странного, имеется UDP сервер, к которому
>>>> хочется добавить "быстрый" TCP и TLS силами Nginx.
>>>>
>>>> Но проблема в том, что при вот такой конфигурации:
>>>> stream {
>>>> upstream backend {
>>>> server 127.0.0.1:1122 weight=5;
>>>> server 127.0.0.22:1122 weight=1;
>>>> }
>>>> server {
>>>> # Listen UDP
>>>> listen 127.0.0.1:53 udp;
>>>> # Listen TCP
>>>> listen 127.0.0.1:53;
>>>>
>>>> # Listen TLS/SSL
>>>> listen 127.0.0.1:853 ssl;
>>>> proxy_connect_timeout 1s;
>>>> proxy_timeout 3s;
>>>> proxy_pass backend;
>>>> ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
>>>> ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
>>>> }
>>>> }
>>>>
>>>> Если запрос на Nginx приходит по UDP, то он отправляется на бэкэнд по
>>>> UDP. Если приходит по TCP либо SSL - он уходит по TCP на бэкэнд.
>>>>
>>>> Мне вот нужно, чтобы связь с бэкэндом была сугубо по UDP, но как этого
>>>> достичь - не понимаю.
>>>
>>> Пока никак. Протокол проксирования всегда тот же, что и протокол клиента.
>>>
>>> На текущий момент не ясно, насколько востребовано проксирование по
>>> другому протоколу.
>>>
>>> --
>>> Roman Arutyunyan
>>>
>>> _______________________________________________
>>> nginx-ru mailing list
>>> nginx-ru на nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>> --
>> Sincerely yours, Pavel Odintsov
>> ,
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru на nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
> --
> Regards,
> Konstantin
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
--
Sincerely yours, Pavel Odintsov
Подробная информация о списке рассылки nginx-ru