Re: limit rate и высокие скорости

2020-06-26 Пенетрантность Maxim Dounin
Hello!

On Thu, Jun 25, 2020 at 03:52:47PM -0400, edo1 wrote:

> > https://trac.nginx.org/nginx/ticket/1678#comment:1
> 
> читал
> 
> > Подкрутить можно размеры буферов и/или включить sendfile,
> 
> размеры крутил (без них было сильно хуже), sendfile тоже пробовал включать
> (точнее отключать aio).
> 
> с "output_buffers 2 10m" получается около 80Мб/с, но 20Мб на клиента как-то
> перебор (и опять же это не ровно 100, как в указано через limit_rate)

Ну так и гигабит на клиента - это немало.

Там достаточно простой алгоритм, для ограничения мгновенной 
скорости считающий время, положенное на отправку конкретного 
набора буферов.  И если погрешности вычислений велики - результат 
оказывается, скажем так, не идеальным.

При скорости в 100 мегабайт в секунду - характерным размером будет 
102 килобайта, объём данных, отправляемый за 1 миллисекунду.  
Суммарный размер буферов меньше - мгновенная скорость 
ограничиваться не будет.  А если больше - то будет, и при типичном 
значении CONFIG_HZ=250 задержки в 1 миллисекунду будут 
превращаться в 4 миллисекунды, то есть скорость имеет все шансы 
оказаться в четыре раза меньше заданной (а если CONFIG_HZ вдруг 
меньше, как в тикете по ссылке - то будет и того хуже).  
Погрешность процентов в 10 получим где-то ближе к 4 мегабайтам 
буферов суммарно, но тут уже скорее всего будут другие 
ограничивающие факторы - как то особенности шедулинга, размеры 
буферов сокетов и другие задержки в ходе обработки.

Пытаться с этим бороться и напрограммировать алгоритм, не 
подверженный ошибкам при "плохих" размерах буферов - можно, но 
смысла в этом не очень много, так как для ограничений в гигабиты 
limit_rate обычно не используют, AFAIK.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как обработать редирект и проксировать результат приложению?

2020-06-26 Пенетрантность Илья Шипицин
это не во всех случаях можно сделать корректно.

например, 301 по RFC можно отвечать только на GET. а если сервер ответил
301 на POST, какой запрос надо отправить на новый адрес, тоже POST ? или
GET ?
вот именно этот выбор и доносится до клиента, когда 301 транслируется один
в один.

теоретически, вы можете накостылить обработчик 301-ошибки, назначить его на
локейшен, и в локейшене сделать proxy_pass
но это очень скользкая дорожка

пт, 26 июн. 2020 г. в 17:41, Александр Карабанов :

> Здравствуйте.
>
> Приложению запрещено самостоятельно открывать соединения с внешним миром.
> Приложение отправляет запрос на proxykipalive.lan, а Nginx проксирует этот
> запрос на целевой хост (это сделано, чтобы переиспользовать соединение за
> счёт keepalive и не открывать новое соединение на каждый запрос от
> приложения).
> Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
> естественно приложение, получив вместо ожидаемого контента, 301 редирект
> сломалось.
> Есть ли способ заставить Nginx обработать редирект самостоятельно и отдать
> приложению готовый контент?
> --
> С уважением,
> Александр Карабанов
> ___
> 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

Как обработать редирект и проксировать результат приложению?

2020-06-26 Пенетрантность Александр Карабанов
Здравствуйте.

Приложению запрещено самостоятельно открывать соединения с внешним миром.
Приложение отправляет запрос на proxykipalive.lan, а Nginx проксирует этот
запрос на целевой хост (это сделано, чтобы переиспользовать соединение за
счёт keepalive и не открывать новое соединение на каждый запрос от
приложения).
Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
естественно приложение, получив вместо ожидаемого контента, 301 редирект
сломалось.
Есть ли способ заставить Nginx обработать редирект самостоятельно и отдать
приложению готовый контент?
-- 
С уважением,
Александр Карабанов
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru