Re: Не отдаёт ответ пока буфер не наполнится
On Thursday 18 December 2014 13:54:53 sofiamay wrote: [..] Вы немножко меня не правильно поняли :-) Я предполагал что Nginx умеет одновременно и получать и отдавать свой буфер. Т.е. получил первый байт в буфер и тут же начинает передавать ответ клиенту при этом продолжая получать данные в буфер. Это как бы совместный доступ к буферу, один поток наполняет, а второй одновременно считывает и передаёт клиенту. [..] Неблокирующиеся чтение и запись данных из/в сокет - это по сути операции копирования в памяти, очень быстрые. Делать это одновременно в разных потоках будет только дороже. Так что вся ваша идея, по крайней мере в такой формулировке, лишена смысла и nginx уже работает эффективно в этом месте. Значение off в proxy_buffering, как это и изложено в документации, все равно подразумевает наличие буфера, размер которого регулируется директивой proxy_buffer_size. Если он достаточно велик, чтобы вместить в себя весь ответ, то по возможности он будет получен полностью и это ни чем существенно по эффективности не будет отличаться от режима on. Ваша проблема видимо в том, что бекенд не отдает весь ответ сразу, а делает это постепенно маленькими порциями, так что непонятно, как вы намереваетесь его освободить. Такому бекенду уже ничем не поможешь и режима работы proxy_buffering off для него будет вполне достаточно. -- Валентин Бартенев ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
В письме от Чт, 18 декабря 2014 13:00:28 пользователь sofiamay написал: но ведь при этом Nginx не будет получать максимально быстро А как будет? Не максимально быстро? :) Нет никакой магии. С буферизацией ответа NginX сначала получает ответ, потом отдаёт его. Без буферизации — отдаёт сразу как получил (естественно, трятя определённое к-во микросекунд на проход мимо себя). Если бекенд отдаёт контент быстро, то можно увеличить размер буфера, тогда NginX не будет тратить время на дамп на диск того, что не поместилось в заданный вами размер, будет хранить поступающий ответ в памяти и оттуда целиком и быстро отдавать. Если бекенд отдаёт ответ медленно, но хочется чтобы клиент не ждал полчаса — можно отключить буферизацию ответа. Теряется весь смысл в буферах и их полезности. см. выше. Я конечно же спрашиваю о другом - как настроить чтобы Nginx по прежнему принимал максимально быстро весь ответ от Апача Он итак его принимает максимально быстро, на сколько может (на сколько быстро его отдаёт бекенд + задержки на путь от бекенда до NgX + пучок микросекунд на внутренние проверки). но при этом начинал его передавать сразу же с первого байта. Это взаимоисключающие параграфы. Либо NginX принимает весь ответ в буфер и сразу после принятия отдаёт его, либо он отдаёт его сразу как получил. Или так, или так. Третьего не дано. Что я делаю не так? Не понимаете сути вещей, например :) // или плохо читаете документацию и код. Или и то и другое. Тут сложно судить не будучи телепатом. -- Best regards, mva signature.asc Description: This is a digitally signed message part. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
Я читал документацию, даже черезчур усердно. Видимо всё дело в том, что я переоценил возможности Nginx, я думал что он может принимать ответ в буфер от Apache и при этом одновременно отдавать его медленному клиенту. Т.е. я думал что он умеет одновременно и получать и отдавать свой буфер, оказалось нет. Получается что можно либо включить буферизацию и ждать пока первый буфер полностью не заполнится, либо выключить буферизацию. А то что мне надо Nginx не умеет. Ok большое спасибо за подсказки. P.S. Товарищ мне подсказал сделать 500 буферов по 256 байт, но чую это приведёт лишь к перерасходу ресурсов, накладные расходы и т.д. и это только во вред. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,255640,255644#msg-255644 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
В письме от Чт, 18 декабря 2014 13:23:56 пользователь sofiamay написал: Я читал документацию, даже черезчур усердно. Видимо всё дело в том, что я переоценил возможности Nginx, я думал что он может принимать ответ в буфер от Apache и при этом одновременно отдавать его медленному клиенту. Т.е. я думал что он умеет одновременно и получать и отдавать свой буфер, оказалось нет. А смысл от этого? Воркфлоу с буферами: создал буферы = получил = отдал = уничтожил буферы Воркфлоу без буферов: получил = отдал Смысл от буферов, если их содержимое уже у клиента? Зачем его (содержимое) тогда буферизировать? Куда его дальше девать? Получается что можно либо включить буферизацию и ждать пока первый буфер полностью не заполнится, либо выключить буферизацию. А то что мне надо Nginx не умеет. Ok большое спасибо за подсказки. А что Вам надо? Из Вашего объяснения выходит что Вам нужно чтобы клиент моментально получал то, что отдал бекенд. Куда тогда контент из буферов девать, если он уже у клиента? Между запросами буферы не пересекаются (ну, есть всякие edge кейсы с дедупликацией памяти и миллионами запросов в секунду, когда могут, но у простых смертных шанс их пересечения маловероятен. P.S. Товарищ мне подсказал сделать 500 буферов по 256 байт, но чую это приведёт лишь к перерасходу ресурсов, накладные расходы и т.д. и это только во вред. В данном случае — да. Тем более, что в случае NgX и бекенда на одной машине буферизация, так-то, не особо и нужна. P.S. В соседнем треде же говорили: используйте IIS :D -- Best regards, mva signature.asc Description: This is a digitally signed message part. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
А смысл от этого? Воркфлоу с буферами: создал буферы = получил = отдал = уничтожил буферы Воркфлоу без буферов: получил = отдал Смысл от буферов, если их содержимое уже у клиента? Зачем его (содержимое) тогда буферизировать? Куда его дальше девать? Смысл очевиден, освободить драгоценный ресурс - бекенд. Всосать всё в буфер с максимальной скоростью и отпустить воркера, а отдавать медленному клиенту уже из буфера. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
Смысл вопроса прост, а ответ неочевиден: если клиент медленный и отключена буферизация? Как поступит nginx? Будет в час по чайной ложке забирать у бэкенда и передавать клиенту данные, задерживая таким образом бэкенд? Или все же получит куда-то ответ полностью и будет потихоньку его отдавать? 18 декабря 2014 г., 21:38 пользователь Vadim A. Misbakh-Soloviov m...@mva.name написал: В письме от Чт, 18 декабря 2014 13:23:56 пользователь sofiamay написал: А смысл от этого? ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
18 декабря 2014 г., 22:41 пользователь sofiamay nginx-fo...@nginx.us написал: Aleksandr Sytar Wrote: --- А вам не кажется, что в этом случае буфера нет? Или вы путаете буферизацию с кешированием ответов, или одно из двух. Да нет, не кажется. В таком варианте буфер есть, самый что ни на есть. А вот каким боком вы сюда приплели кэширование ответов, это вызывает вопрос - вы ничего не путаете? :-) Т.е. получил первый байт в буфер и тут же начинает передавать ответ клиенту при этом продолжая получать данные в буфер. - В чем тогда практический смысл буфера, какую он роль, оп вашему выполняет? ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
mva Wrote: --- см. выше. В случае быстрых клиентов это не нужно. А с медленными можно бороться. Странный ответ. Уже как несколько лет получаю рассылку, а про борьбу с медленными клиентами ничего конкретного не было. Постоянные тычки в документацию про limit conn limi req и прочее, но всё это на самом деле никак не поможет с DDOS атакой с разных IP нормально организованной. На слабом сервере отключение буферизации и правильный ddos вмиг положит сервер залипшими запросами, когда клиент запрашивает самую жирную и медленную страницу на сервере и крайне медленно её получает. Никаких лимиты тут не помогут. Апаче иссякнет и будет висеть, вместо того чтобы Nginx быстро получил ответы в буфера по моей схеме и раздавал их потиху. Решение проблемы - включение буферизации, но это заметно снижает отклик, как вы сами сказали негативно сказывается на быстрых клиентах. Но раз вы утверждаете что предполагаемая мной схема работы с буфером (которой на самом деле нет) никому не нужна и с медленными коннектами можно бороться, то у меня к вам вопрос - КАК? Посоветуйте пожалуйста конкретные методы борьбы с таким типом DDOS, такие методы которые действительно будут работать. Условия: буферизация выключена, limit conn и limit req не помогают (это только от детей защита, а нет от медленных клиентов с разных ip), и Апаче, который дохнет без буферизации Nginx. Заранее спасибо за совет, а то тут часто любят бросаться фразами типа МОЖНО БОРОТЬСЯ, а вот как, это уже типо сами ищите. А на деле то никак, кроме как буфером. То есть пустые фразы. Даже Максим Дунин помнится в рассылке кому-то советовал limit conn и limit req и по делу больше ничего не подсказал, а вы говорите есть методы борьбы, вот мне и интересно стало, уже не те ли это самые методы которые и так всем известны и помогают они слабо Моя схема работы с буфером была бы очень кстати и она никак не блокирует работу Nginx, раз уж вы говорите про прелесть неблокируемости :-) Жаль что Nginx так не умеет. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,255640,255659#msg-255659 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не отдаёт ответ пока буфер не наполнится
Aleksandr Sytar Wrote: --- Т.е. получил первый байт в буфер и тут же начинает передавать ответ клиенту при этом продолжая получать данные в буфер. - В чем тогда практический смысл буфера, какую он роль, оп вашему выполняет? Ну как какую, позволяет моментально освободить жирные до памяти и неповоротливые воркеры Апача с PHP. Это же очевидно. Мой способ работы с буфером - это та же буферизация, только с моментальной отдачей. И буфер работает и ответ не задерживается. Я же говорю, изначально думал что так и есть, просто в конфиге проблема. Оказалось что схема работы с буферами совсем иная. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,255640,255660#msg-255660 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru