Я собираю на основе форка OpenSSL - QuicTLS, там должна быть поддержка early data
.
Обновился до версии 1.5.0, ошибка сохраняется
Коллега из отпуска вернется - попрошу его ещё раз посмотреть на эту проблему.
Спасибо.
Может где-то ещё можно поставить отладочные строки?
Пока непонятно, проблема может быть и где-то в недрах SSL-библиотеки скрыта.
Давно сталкивался с аналогичной ошибкой:
На тот момент помогло увеличение keepalive_requests с 128 до 102400.
Можно включить дополнительную откладку, собрав сервер со следующими флагами:
./configure
--with-http_v3_module
--with-debug
--with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO -DNGX_QUIC_DEBUG_FRAMES"
и постараться получить debug-лог с проблемой.
Error configure:
./configure: error: invalid option "-DNGX_QUIC_DEBUG_CRYPTO"
Так должно сработать?
--with-cc-opt=-DNGX_QUIC_DEBUG_PACKETS --with-cc-opt=-DNGX_QUIC_DEBUG_CRYPTO --with-cc-opt=-DNGX_QUIC_DEBUG_FRAMES
Ошибка сборки:
angieQuic> In file included from src/core/ngx_core.h:62,
angieQuic> from src/event/quic/ngx_event_quic_protection.c:9:
angieQuic> src/event/quic/ngx_event_quic_protection.c: In function 'ngx_quic_retry_seal':
angieQuic> src/event/quic/ngx_event_quic_protection.c:971:41: error: 'pkt' undeclared (first use in this function)
angieQuic> 971 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
angieQuic> | ^~~
angieQuic> src/core/ngx_log.h:92:10: note: in definition of macro 'ngx_log_debug'
angieQuic> 92 | if ((log)->log_level & level) \
angieQuic> | ^~~
angieQuic> src/event/quic/ngx_event_quic_protection.c:971:5: note: in expansion of macro 'ngx_log_debug2'
angieQuic> 971 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
angieQuic> | ^~~~~~~~~~~~~~
angieQuic> src/event/quic/ngx_event_quic_protection.c:971:41: note: each undeclared identifier is reported only once for each function it appears in
angieQuic> 971 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
angieQuic> | ^~~
angieQuic> src/core/ngx_log.h:92:10: note: in definition of macro 'ngx_log_debug'
angieQuic> 92 | if ((log)->log_level & level) \
angieQuic> | ^~~
angieQuic> src/event/quic/ngx_event_quic_protection.c:971:5: note: in expansion of macro 'ngx_log_debug2'
angieQuic> 971 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
angieQuic> | ^~~~~~~~~~~~~~
angieQuic> make[1]: *** [objs/Makefile:1227: objs/src/event/quic/ngx_event_quic_protection.o] Error 1
angieQuic> make[1]: *** Waiting for unfinished jobs....
angieQuic> make[1]: Leaving directory '/build/angie-1.5.0'
angieQuic> make: *** [Makefile:10: build] Error 2
Видимо давно сборка с этими опциями не проверялась.
Исправление:
diff --git a/src/event/quic/ngx_event_quic_protection.c b/src/event/quic/ngx_event_quic_protection.c
--- a/src/event/quic/ngx_event_quic_protection.c
+++ b/src/event/quic/ngx_event_quic_protection.c
@@ -968,7 +968,7 @@ ngx_quic_retry_seal(ngx_str_t *ad, ngx_s
#ifdef NGX_QUIC_DEBUG_CRYPTO
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pkt->log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
"quic retry itag len:%uz %xV", ad->len, ad);
#endif
Спасибо, патч сработал, запустил тест.
Куда можно выложить лог файл? Объём около 1 Mb.
Можно мне почтой кинуть: vbart@wbsrv.ru
Отправил.
Да, получил. Спасибо. Будем изучать.
Попробуйте, пожалуйста, вот с таким патчем, и расскажите, сохраняется ли проблема:
# HG changeset patch
# User Vladimir Khomutov <vl@wbsrv.ru>
# Date 1712336626 -10800
# Fri Apr 05 20:03:46 2024 +0300
# Node ID 31cb8129fa83bfb54390af46286ddcf7f91cd67d
# Parent 356293af579449a2713618c8570cd1079a425e33
[mq]: early_hs_timers.diff
diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c
--- a/src/event/quic/ngx_event_quic_streams.c
+++ b/src/event/quic/ngx_event_quic_streams.c
@@ -588,6 +588,10 @@ ngx_quic_init_streams(ngx_connection_t *
qc = ngx_quic_get_connection(c);
+ if (!qc->closing && qc->close.timer_set) {
+ ngx_del_timer(&qc->close);
+ }
+
if (qc->streams.initialized) {
return NGX_OK;
}
@@ -643,10 +647,6 @@ ngx_quic_do_init_streams(ngx_connection_
qc->streams.initialized = 1;
- if (!qc->closing && qc->close.timer_set) {
- ngx_del_timer(&qc->close);
- }
-
return NGX_OK;
}
Проверил, проблема сохранилась
Тогда повторяем процедуру со сбором логов. Нужен access.log и error.log. В последней серии логов со стороны сервера все файлы были отгружены, и в логах никаких серьёзных проблем не наблюдалось. Было закрытие соединения со стороны сервера не по тому таймеру (патч), что могло бы вызывать ругань у браузера в определённых случаях. В новых логах я ожидаю увидеть отсутствие этой проблемы в error.log, а в access.log будут статусы всех загрузок.
Логи на какую почту можно скинуть?