Re: тестирование http2 утилитой h2spec

2019-09-30 Пенетрантность Sergey Kandaurov

> On 28 Sep 2019, at 11:42, Илья Шипицин  wrote:
> 
> привет!
> 
> если проверять nginx-1.17.4 вот этой утилитой 
> https://github.com/summerwind/h2spec
> то несколько десятков тестов фейлятся. можете прокомментировать ?
> 
> [ilia@localhost h2spec]$ ./h2spec -p 443 -h xxx.xxx.ru -t http2 
> Hypertext Transfer Protocol Version 2 (HTTP/2)
>   3. Starting HTTP/2
> 3.5. HTTP/2 Connection Preface
>   ✔ 1: Sends client connection preface
>   ✔ 2: Sends invalid connection preface
> 
>   4. HTTP Frames
> 4.1. Frame Format
>   ✔ 1: Sends a frame with unknown type
>   ✔ 2: Sends a frame with undefined flag
>   ✔ 3: Sends a frame with reserved field bit
> 
> 4.2. Frame Size
>   ✔ 1: Sends a DATA frame with 2^14 octets in length

Здесь тестируется что-то другое.

Тест не проверяет, что мы отправляем максимальный SETTINGS_MAX_FRAME_SIZE,
либо проверяет, но тогда описание не соответствует тому, что тестируется,
т.к. согласно данным объективного контроля DATA имеет длину 16777215 байт. 
Далее, если тест наступит на client_max_body_size (по умолчанию 1m)
и nginx вернёт HTTP 413, не дочитав собственно тело,
тест всё равно будет признан успешным, т.к. получен HEADERS.
Поэтому вопрос, что здесь тестируется.

>   × 2: Sends a large size DATA frame that exceeds the 
> SETTINGS_MAX_FRAME_SIZE
> -> The endpoint MUST send an error code of FRAME_SIZE_ERROR.
>Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)
>  RST_STREAM Frame (Error Code: FRAME_SIZE_ERROR)
>  Connection closed
>  Actual: WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:1)

Вопреки описанию, тест закрывает соединение по собственной инициативе
через две с небольшим секунды после отправки HEADERS.

>   ✔ 3: Sends a large size HEADERS frame that exceeds the 
> SETTINGS_MAX_FRAME_SIZE

Здесь тестируется что-то другое, см. выше по SETTINGS_MAX_FRAME_SIZE.
Тест отправляет HEADERS длиной > SETTINGS_MAX_FRAME_SIZE по умолчанию
и проверяет получение GOAWAY, который приходит, но по другой причине
(и с другим кодом).  А именно - в следствие достижения собственного лимита
в nginx, который настраивается директивой http2_max_header_size.

Дальше не смотрел.

-- 
Sergey Kandaurov

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

Re: Non-idempotent requests vs. upstream failover

2019-09-30 Пенетрантность Илья Шипицин
добрый день,

вы можете не очень сложным образом собрать стенд (и пострелять по нему
curl-ом в режиме POST)
ответы на ваши вопросы зависят от многих "если". такие вещи лучше
обкатывать на стенде. что-то типа TDD (test driven development)

upstream upstream1 {
server 127.0.0.1:81;
server 127.0.0.1:82;
}

server {
listen 127.0.0.1:80;

location / {
  proxy_pass http://upstream1;
}
}

server {
  listen 127.0.0.1:82;
  location / {
 return 200;
 }

}

пн, 30 сент. 2019 г. в 15:44, rihad :

> Спасибо, а логируется ли в таких случаях в error log? Или только если все
> апстримы фейлнули?
>
> Posted at Nginx Forum:
> https://forum.nginx.org/read.php?21,285751,285753#msg-285753
>
> ___
> 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

Re: Non-idempotent requests vs. upstream failover

2019-09-30 Пенетрантность rihad
Спасибо, а логируется ли в таких случаях в error log? Или только если все
апстримы фейлнули?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,285751,285753#msg-285753

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

Re: Non-idempotent requests vs. upstream failover

2019-09-30 Пенетрантность Sergey Kandaurov

> On 30 Sep 2019, at 07:40, rihad  wrote:
> 
> В случае если proxy апстрим не доступен на уровне сокета (ECONNREFUSED, а не
> просто вернулось HTTP 5хх), будет ли nginx ретраить POST запрос на следующих
> апстримах? По идее должен т.к. запрос никем не был принят и обработан.

В данном случае по умолчанию будет попытка выбрать следующий сервер,
т.к. запрос ещё не был отправлен.  Подробнее тут:
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#non_idempotent

-- 
Sergey Kandaurov

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