QUIC: err_quic_protocol_error

Я собираю на основе форка OpenSSL - QuicTLS, там должна быть поддержка early data.

Обновился до версии 1.5.0, ошибка сохраняется :frowning:

Коллега из отпуска вернется - попрошу его ещё раз посмотреть на эту проблему.

1 Like

Спасибо.
Может где-то ещё можно поставить отладочные строки?

Пока непонятно, проблема может быть и где-то в недрах 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 Like

Спасибо, патч сработал, запустил тест.

Куда можно выложить лог файл? Объём около 1 Mb.

Можно мне почтой кинуть: vbart@wbsrv.ru

Отправил.

Да, получил. Спасибо. Будем изучать.

1 Like

Попробуйте, пожалуйста, вот с таким патчем, и расскажите, сохраняется ли проблема:

# 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;
 }

1 Like

Проверил, проблема сохранилась :frowning:

Тогда повторяем процедуру со сбором логов. Нужен access.log и error.log. В последней серии логов со стороны сервера все файлы были отгружены, и в логах никаких серьёзных проблем не наблюдалось. Было закрытие соединения со стороны сервера не по тому таймеру (патч), что могло бы вызывать ругань у браузера в определённых случаях. В новых логах я ожидаю увидеть отсутствие этой проблемы в error.log, а в access.log будут статусы всех загрузок.

Логи на какую почту можно скинуть?