ngx http charset module не добавляет пробел для text/plain

2019-09-03 Пенетрантность pavlusha23
Не могу понять почему nginx формирует разные заголовки. Баг? Конфиг такой:

include   /etc/nginx/mime.types;
charset   "utf-8";
charset_types text/xml text/plain application/javascript
application/rss+xml application/xml text/css text/javascript text/markdown
text/calendar text/x-component text/vcard text/cache-manifest text/vtt
application/json application/manifest+json;
default_type  application/octet-stream;

При отправке в PHP заголовка :

header('Content-type: text/plain');
echo "test";

В браузере(в любом) по ssl HTTP 2 получаю: text/plain;charset=UTF-8 т.е.
перед charset= нет пробела. Мелочь, но хотелось бы одинакового поведения для
всех заголовков.

Для других типов такого не наблюдаю, там всё в норме, например в том же PHP
nginx выдаёт: content-type: application/xml; charset=utf-8
Хотя всё конечно не проверял, возможно глючит еще на каких-то заголовках.

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

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

Re: Nginx не добавляет необходимые библиотеки при сборке из исходников со сторонними модуямии

2019-09-03 Пенетрантность analytic
Спасибо. Классный мастер класс, жаль я раньше о нем не знал :(( Сберег бы
время.

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

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

Re: nginx полностью загружает весь процессор при reload'e

2019-09-03 Пенетрантность Maxim Dounin
Hello!

On Tue, Sep 03, 2019 at 03:18:36PM +0500, Dmitry Sergeev wrote:

> Добрый день,  спасибо за ответ.
> 
> On 02/09/2019 22:11, Maxim Dounin wrote:
> > Just in case, для работы такая конфигурация смысла не имеет - если
> > тикеты выключены, то ключ для их шифрования не нужен.  Ключ имеет
> > смысл задавать, если тикеты включены.
> >
> > С точки зрения влияния на reload - внешний ключ позволит сохранить
> > тикеты при reload'ах, а выключение тикетов - уведёт всё в кэш
> > сессий.
> >
> > Ну выключать тикеты - это, безусловно, плохой путь.  Тикеты -
> > способ переложить хранение сессий на клиентов, и отказываться от
> > этого - очевидно недальновидно с точки зрения нагрузки на сервер.
> >
> Да, я неверно понял доки.
> 
> > Отмечу также, что даже в наиболее экстремальных случаях из
> > представленных на графике - рост потребления процессора с ~200% до
> > ~300% не выглядит сколько-нибудь фатальным.  Какой-то рост
> > потребления процессора при релоадах - нормален, здесь же
> > наблюдается рост всего в 1.5 раза.  Если это проблема - то стоит
> > задуматься о добавлении мощностей и/или заняться оптимизацией
> Да, сейчас это для меня просто представляет интерес, после перехода на 
> openssl 1.0.2g и включение http2, проблем это особых не вызывает.
> > А вот то, что средняя нагрузка без тикетов заметно выше - это
> > немного странно.  Само хранение сессий - должно бы стоить очень
> > недорого с точки зрения процессора, а в остальном разница не
> > принципиальна.  Но, возможно, тут дело в том, что размер кэша
> > SSL-сессий просто мал для имеющегося количества клиентов, и
> > поэтому при выключении тикетов handshake'и начинают происходить
> > чаще, что и приводит к росту потребления процессора.
> Возможно. Это немного не то, но мне было интересно как увеличение кэша 
> ssl сессий повлияет на нагрузку при reload'e:
> 
> http://dl4.joxi.net/drive/2019/09/03/0030/2608/1985072/72/8608b87db7.jpg
> 
> Числами отметил разное количество ssl_session_cache от 20m до 256m. 
> Вроде никак не влияет.  Сегодня тестил при 8K rps (вчера 5-6K). Поэтому 
> нагрузка скачет чуть выше.

От размера кэша сессий должна зависеть высота "полки" между 
reload'ами.  Если кэш мал - то полных handshake'ов будет больше, 
чем могло бы быть, и соответственно CPU usage в полке будет 
больше.  Ну и всё это имеет смысл скорее при выключенных тикетах, 
о чём и шла речь выше.  А на графике - они, похоже, включены.

> А вот тикеты помогли вообще круто.  Нагрузка поднимается всего-лишь на 
> 5%-10%:
> http://dl3.joxi.net/drive/2019/09/03/0030/2608/1985072/72/ac00a4d2d0.jpg
> 
> Здесь 1 - это без ssl_session_ticket_key, а 2,3,4 - c включенными 
> тикетами и указанными постояным ключем ssl_session_ticket_key.

Ну ок, то есть как и ожидалось - пик явно из-за SSL handshake'ов, 
использование постоянных ключей для тикетов - лечит.

> Итого:
> 
> Сущесвтенно решить проблему помогло следующее:
> 1) переход на http2 (openssl 1.02.g) - понизилась нагрузка в целом, и 
> при reload'e нагрузка конечно возрастала, но не надолго (5-20 секунд, а 
> раньше от 30-40 секунд, до 5 минут).
> 2) И вообще убрать хоть какое-то сущесвтенное повышение нагрзуки помогло 
> включение ssl_session_tickets(по умолчанию включено) с установелнным 
> ssl_session_ticket_key (по умолчанию генерируется заново при каждом 
> reload'e, его лучше указать чтобы этого не происходило).
> 
> Оставил такие параметры:
> 
>      ssl_session_cache   shared:SSL:20m;
>      ssl_session_timeout 30m;
>      ssl_session_tickets on;
>      ssl_session_ticket_key /etc/nginx/ssl/ticket.key; # ticket.key - 
> файл с рандомными 80 или 48 байт
> 
> Кэш ssl сессий оставил, хоть в моем случае он вроде как сильно не влияет 
> (по крайней мере я этого не заметил).

Использовать "ssl_session_tickets on;" - не нужно, это поведение 
по умолчанию.  И отмечу также, что ключ для тикетов - надо 
периодически менять, ибо получив этот ключ - можно расшифровать 
весь трафик.

И я бы ещё рекомендовал посмотреть в сторону ECDSA-сертификатов, 
там handshake банально на порядок быстрее при той же 
криптостойкости:

$ openssl speed rsa2048 ecdsap256
...
  signverifysign/s verify/s
rsa 2048 bits 0.000992s 0.33s   1008.1  30297.9
  signverifysign/s verify/s
 256 bit ecdsa (nistp256)   0.0001s   0.0001s  17145.0   9276.9

То есть 1008.1 подписей в секунду в случае RSA 2048 bit, и 17145.0 
подписей в секунду для ECDSA 256 bit.

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

Re: nginx полностью загружает весь процессор при reload'e

2019-09-03 Пенетрантность Dmitry Sergeev

Добрый день,  спасибо за ответ.

On 02/09/2019 22:11, Maxim Dounin wrote:

Just in case, для работы такая конфигурация смысла не имеет - если
тикеты выключены, то ключ для их шифрования не нужен.  Ключ имеет
смысл задавать, если тикеты включены.

С точки зрения влияния на reload - внешний ключ позволит сохранить
тикеты при reload'ах, а выключение тикетов - уведёт всё в кэш
сессий.

Ну выключать тикеты - это, безусловно, плохой путь.  Тикеты -
способ переложить хранение сессий на клиентов, и отказываться от
этого - очевидно недальновидно с точки зрения нагрузки на сервер.


Да, я неверно понял доки.


Отмечу также, что даже в наиболее экстремальных случаях из
представленных на графике - рост потребления процессора с ~200% до
~300% не выглядит сколько-нибудь фатальным.  Какой-то рост
потребления процессора при релоадах - нормален, здесь же
наблюдается рост всего в 1.5 раза.  Если это проблема - то стоит
задуматься о добавлении мощностей и/или заняться оптимизацией
Да, сейчас это для меня просто представляет интерес, после перехода на 
openssl 1.0.2g и включение http2, проблем это особых не вызывает.

А вот то, что средняя нагрузка без тикетов заметно выше - это
немного странно.  Само хранение сессий - должно бы стоить очень
недорого с точки зрения процессора, а в остальном разница не
принципиальна.  Но, возможно, тут дело в том, что размер кэша
SSL-сессий просто мал для имеющегося количества клиентов, и
поэтому при выключении тикетов handshake'и начинают происходить
чаще, что и приводит к росту потребления процессора.
Возможно. Это немного не то, но мне было интересно как увеличение кэша 
ssl сессий повлияет на нагрузку при reload'e:


http://dl4.joxi.net/drive/2019/09/03/0030/2608/1985072/72/8608b87db7.jpg

Числами отметил разное количество ssl_session_cache от 20m до 256m. 
Вроде никак не влияет.  Сегодня тестил при 8K rps (вчера 5-6K). Поэтому 
нагрузка скачет чуть выше.


А вот тикеты помогли вообще круто.  Нагрузка поднимается всего-лишь на 
5%-10%:

http://dl3.joxi.net/drive/2019/09/03/0030/2608/1985072/72/ac00a4d2d0.jpg

Здесь 1 - это без ssl_session_ticket_key, а 2,3,4 - c включенными 
тикетами и указанными постояным ключем ssl_session_ticket_key.


Итого:

Сущесвтенно решить проблему помогло следующее:
1) переход на http2 (openssl 1.02.g) - понизилась нагрузка в целом, и 
при reload'e нагрузка конечно возрастала, но не надолго (5-20 секунд, а 
раньше от 30-40 секунд, до 5 минут).
2) И вообще убрать хоть какое-то сущесвтенное повышение нагрзуки помогло 
включение ssl_session_tickets(по умолчанию включено) с установелнным 
ssl_session_ticket_key (по умолчанию генерируется заново при каждом 
reload'e, его лучше указать чтобы этого не происходило).


Оставил такие параметры:

    ssl_session_cache   shared:SSL:20m;
    ssl_session_timeout 30m;
    ssl_session_tickets on;
    ssl_session_ticket_key /etc/nginx/ssl/ticket.key; # ticket.key - 
файл с рандомными 80 или 48 байт


Кэш ssl сессий оставил, хоть в моем случае он вроде как сильно не влияет 
(по крайней мере я этого не заметил).



Спасибо Вам большое, Ваши советы помогли полностью избавиться от этого 
эффекта. Надеюсь кому-то тоже будет полезна эта переписка.


--
Kind regards
Dmitry Sergeev
Tel: +7 (951) 129-75-72

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

Re: Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?

2019-09-03 Пенетрантность Pavel
Здравствуйте.

> Hello!
>
> On Tue, Aug 27, 2019 at 11:50:18PM +0300, Pavel wrote:
>
>> Мы  состоим  в  реестре  организаторов  распространения  информации  и
>> поэтому обязаны предоставлять в надзорный орган ключи tls сессий.
>> 
>> Для  таких случаев существует механизм по перехвату вызовов библиотеки
>> openssl: https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/
>> Суть  простая - перед запуском демона, обрабатывающего TLS-соединения
>> клиентов,   через   LD_PRELOAD   подгружается  эта  библиотека  и  она
>> сбрасывает в текстовый файл, указанный в переменой SSLKEYLOGFILE, ключи 
>> pre-master.
>> 
>> Эта  схема  срабатывает с апачем, но с энжинксом ключи не пишутся. Нет
>> ли  идей  или подсказок из-за чего это может быть и как вообще  можно 
>> записать
>> эти самые pre-master keys в энжинксе?
>
> [...]
>
>> [Service]
>> Environment=SSLKEYLOGFILE=/tmp/premaster.txt
>> Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so
>
> [...]
>
>> но  тем  не  менее  ключи  в файл при обращении к энжинксу по https не
>> пишутся.
>
> Скорее всего причина в том, что переменные 
> окружения очищаются при запуске, подробнее тут:
>
> http://nginx.org/r/env
>

Огромное спасибо!

Ключи начали записываться когда добавил в nginx.conf
env LD_PRELOAD=/usr/local/lib/libsslkeylog.so;
env SSLKEYLOGFILE=/tmp/premaster.txt;


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