Re: Количество клиенстких ошибок выросло после обновления до новой nginx(1.14.2) c новым openssl (1.0.2g)

Maxim Dounin mdounin на mdounin.ru
Пт Апр 5 15:36:45 UTC 2019


Hello!

On Thu, Apr 04, 2019 at 10:36:33PM +0500, Dmitry Sergeev wrote:

> Добрый день.
> ОС: Ubuntu 16.04
> 
> Nginx версия с которой проблемы:
> nginx version: nginx/1.14.2
> built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
> built with OpenSSL 1.0.2g  1 Mar 2016
> TLS SNI support enabled
> 
> Обновились до последней стабильной сборки nginx. Количество ошибок 4xx 
> значительно повышается: А именно 499 в два раза, 400 в 20 раз, 408 в 14 
> раз, в целом всего 4xx ошибок становится в 3-4 раза больше.
> 
> Раннее мы работали на nginx 1.12.1 собственной сборки с openssl 1.0.1u, 
> когда-то я собирали эту версию по тем же причинам (сборка nginx 1.12.1 
> из репозитория себя вела точно также - куча ошибок).
> 
> Поэтому сейчас снова пришлось собрать уже новую версию nginx (1.14.2) но 
> со старым openssl 1.0.1u.
> 
> Привожу скрин для наглядности: http://joxi.net/n2YQdVZSbozM02.jpg
> Здесь статистка по ошибкам из двух одинаковых серверов за 30 минутный 
> интервал времени.
> Где lb21 имеет nginx 1.14.2 + openssl 1.0.1u, а lb21-2 nginx 1.14.2 + 
> openssl 1.0.2g
> 
> Вот так выглядет процесс отката до nginx 1.14.2 + openssl 1.0.1u c точки 
> зрения количества ошибок: http://joxi.net/EA4RKZXHowQDQm.jpg (здесь 
> каждый столбик это количество за минуту).

Количество ошибок на уровне HTTP - может быть нерелевантно 
происходящему, и, скажем, означать, что больше проблемных клиентов 
теперь могут пройти через SSL handshake.

Ну и смотреть надо не на абсолютные цифры, а на проценты от 
трафика.  Если речь про доли процента - наблюдаемое изменение 
может быть следствием того, что проблемы возникают у каких-либо 
малораспространённых клинтов, и совершенно не факт, что на это 
надо обращать внимание.  Например, из OpenSSL 1.0.2 могли убрать 
какие-то workaround'ы для ошибочного поведения, или же из-за 
изменения списка шифров теперь используются другие шифры, которые, 
наоборот, вызывают проблемы в этих клиентах.

Если же хочется таки разобраться - то имеет смысл смотреть 
подробную информацию по ошибкам, в частности - что при этом пишет 
nginx в логи (если есть подробности - они скорее всего на уровне 
info), и что известно про этих клиентов - User-Agent, используемые 
протоколы, шифры и так далее.

> Конфигурации одинаковые, количество трафика одинаковое. Пробовал менять 
> местами версии nginx между этими серверами, сразу видно как начинает 
> расти количество ошибок на том сервере где используется nginx 1.14.2 + 
> openssl 1.0.2g. Тенденция роста количества 499, 400, 408 ошибок видна 
> моментально после обновления версии.
> 
> Пробовал разные версии openssl (ветки 1.0.2, 1.1.1). Все что выше 1.0.1u 
> дает такой результат.  Пробовал отключать/включать http2 никак не влияет.

В первую очередь - в OpenSSL 1.0.1 нет ALPN, то есть HTTP/2 в 
современных браузерах работать не будет.  Если в конфиге включён 
HTTP/2 - переход на OpenSSL 1.0.2 будет сильным изменением 
поведения в любом случае.  Так что имеет смысл HTTP/2 выключить и 
сравнивать строго без HTTP/2.  Важно при этом выключить везде, 
потому как http2 - это опция сокета, и если она останется в любом 
из блоков server, то HTTP/2 продолжит работать.

> Конфиугация ssl в nginx стоит по умолчанию (то есть только указаны 
> диррективы ssl_certificate, ssl_certificate_key).

Если вдруг используются множественные сертификаты в одном блоке 
server - переход с OpenSSL 1.0.1 на 1.0.2 потребует изменения 
цепочек в ssl_certificate, т.к. в случае OpenSSL 1.0.1 цепочка 
только одна и общаяя для всех сертификатов, а в случае 1.0.2 - у 
каждого сертификата своя.

В остальном я каких-либо особенных проблем с OpenSSL 1.0.2 не 
помню, в целом хорошая ветка.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru