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