Re: nginxQuic: медленный ответ от сервера.
Добрый день, > On 28 Jun 2022, at 09:01, izor...@gmail.com wrote: > > Добрый день, Роман. > > Я ещё заметил одну ошибку в работе HTTP 3 протокола. > Через очень долгое время (5-8 часов), браузер начинает отправлять запросы по > HTTP 2 протоколу, вместо > HTTP 3. Собрал debug-лог, но не смог проследить с какого момента прошло > переключение. Если понадобится, > то к вечеру смогу отправить вам логи. Проблема появилась тогда, когда вы начали реконфигурацию nginx (послали SIGHUP). При появлении новых воркеров ломается логика распределения квиковых соединений по воркерам. В итоге, например, новый пакет может прийти в старый воркер, которым он будет проигнорирован. Все бы могло относительно быстро рассосаться после череды ошибок, если бы у вас не висел один запрос с проксировнием вебсокетов, который не давал завершиться старому воркеру. Кроме того, похоже, у вас выключен таймаут на шатдаун воркеров. Если у вас (свежий) Linux, то проблема с распределением квиковых клиентов по воркерам решается включением bpf-модуля. Для этого укажите следующую директиву на верхнем уровне конфига: quic_bpf on; При этом nginx должен иметь админские права (CAP_SYS_ADMIN) при запуске. Roman Arutyunyan a...@nginx.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
Здравствуйте, Роман. Спасибо за помощь в поиске и устранении проблемы! Отключение директивы ssl_ecdh_curve в Nginx помогло. Планируется ли делать баг-репорт в Chrome? Вы писали 12 июня 2022 г., 21:27:53: > Добрый день, > Удалось выяснить следующее. Имеет место проблема на стороне Хрома. Если > точнее, в гугловой библиотоке QUICHE. Проблемa триггерится комбинацией > EarlyData + HelloRetryRequest. Если Хром отправил EarlyData, которую сервер > проигнорировал, то далее клиент не шлет новый ClientHello в ответ на > HelloRetryRequest т.к. зачем-то ждет подтверждения EarlyData. В итоге > соединение зависает и таймаутится. ClientHello ->> EarlyData ->> (ignore) > <- HelloRetryRequest > (timeout) > Самый простой способ обойти проблему - избежать отправки HelloRetryRequest. > В рассматриваемом случае для этого достаточно было убрать из конфигурации > nginx директиву ssl_ecdh_curve. > Заткнуть это также можно и в QUICHE при помощи следующего патча: > diff --git a/quiche/quic/core/quic_session.cc > b/quiche/quic/core/quic_session.cc > index d2976006..ad5c4d3c 100644 > --- a/quiche/quic/core/quic_session.cc > +++ b/quiche/quic/core/quic_session.cc > @@ -2404,6 +2404,9 @@ bool QuicSession::RetransmitLostData() { >return false; > } >} > + if (connection()->encryption_level() == ENCRYPTION_ZERO_RTT) { > +return true; > + } >while (!streams_with_pending_retransmission_.empty()) { > if (!CanWriteStreamData()) { >break; > > Roman Arutyunyan > a...@nginx.com > ___ > nginx-ru mailing list -- nginx-ru@nginx.org > To unsubscribe send an email to nginx-ru-le...@nginx.org -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
Добрый день, On Mon, May 30, 2022 at 04:27:54PM +0400, Roman Arutyunyan wrote: > Добрый день, > > Да, я видел. спасибо. > > > On 30 May 2022, at 16:22, izor...@gmail.com wrote: > > > > Добрый день Роман. > > > > Скинул ссылку с дампом на личную почту. > > Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось > > без ответа > > > > > > -- > > С уважением, > > Izorkin mailto:izor...@gmail.com > > > > ___ > > nginx-ru mailing list -- nginx-ru@nginx.org > > To unsubscribe send an email to nginx-ru-le...@nginx.org > > > Roman Arutyunyan > a...@nginx.com > ___ > nginx-ru mailing list -- nginx-ru@nginx.org > To unsubscribe send an email to nginx-ru-le...@nginx.org Удалось выяснить следующее. Имеет место проблема на стороне Хрома. Если точнее, в гугловой библиотоке QUICHE. Проблемa триггерится комбинацией EarlyData + HelloRetryRequest. Если Хром отправил EarlyData, которую сервер проигнорировал, то далее клиент не шлет новый ClientHello в ответ на HelloRetryRequest т.к. зачем-то ждет подтверждения EarlyData. В итоге соединение зависает и таймаутится. ClientHello -> EarlyData -> (ignore) <- HelloRetryRequest (timeout) Самый простой способ обойти проблему - избежать отправки HelloRetryRequest. В рассматриваемом случае для этого достаточно было убрать из конфигурации nginx директиву ssl_ecdh_curve. Заткнуть это также можно и в QUICHE при помощи следующего патча: diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc index d2976006..ad5c4d3c 100644 --- a/quiche/quic/core/quic_session.cc +++ b/quiche/quic/core/quic_session.cc @@ -2404,6 +2404,9 @@ bool QuicSession::RetransmitLostData() { return false; } } + if (connection()->encryption_level() == ENCRYPTION_ZERO_RTT) { +return true; + } while (!streams_with_pending_retransmission_.empty()) { if (!CanWriteStreamData()) { break; Roman Arutyunyan a...@nginx.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
Добрый день, Да, я видел. спасибо. > On 30 May 2022, at 16:22, izor...@gmail.com wrote: > > Добрый день Роман. > > Скинул ссылку с дампом на личную почту. > Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось без > ответа > > > -- > С уважением, > Izorkin mailto:izor...@gmail.com > > ___ > nginx-ru mailing list -- nginx-ru@nginx.org > To unsubscribe send an email to nginx-ru-le...@nginx.org Roman Arutyunyan a...@nginx.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
Добрый день Роман. Скинул ссылку с дампом на личную почту. Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось без ответа -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
On Sat, May 28, 2022 at 12:03:19PM +0300, izor...@gmail.com wrote: > Сервер nginx не может обработать несколько первых пакетов от клиента по не > известной причине. > В одном из прошлых обсуждений с разработчиком я предоставил свои логи, но до > сих пор не удалось решить проблему. Звучит как сакраментальное "От меня пули ушли". На месте разработчиков я бы сказал: если не можете локализовать проблему, так предоставьте testcase. То есть минимальную конфигурацию, на которой проблема может быть надёжно воспроизведена и изучена посторонними. > Вы писали 28 мая 2022 г., 11:15:15: > > > On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote: > > > Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки, > > да и в том же debug логе может оказаться полезная информация. -- Eugene Berdnikov ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
Здравствуйте, Evgeniy. Сервер nginx не может обработать несколько первых пакетов от клиента по не известной причине. В одном из прошлых обсуждений с разработчиком я предоставил свои логи, но до сих пор не удалось решить проблему. Вы писали 28 мая 2022 г., 11:15:15: > On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote: > Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки, > да и в том же debug логе может оказаться полезная информация. -- С уважением, Izorkin mailto:izor...@gmail.com ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org
Re: nginxQuic: медленный ответ от сервера.
On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote: > Протестировал последнюю ревизию nginxQuic 5b1011b5702b. > Проблема с долгим ответом от сервера всё ещё сохранилась. > От клиента приходит запрос, через tcpdump видно что запрос доходит до сервера > nginx (в debug логе отображается событие), но > по какой-то причине, nginx отдаёт ответ только через 5-7 секунд. Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки, да и в том же debug логе может оказаться полезная информация. -- Eugene Berdnikov ___ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org