Re: ngx ssl certificates вызывается даже для сайтов без ssl
Maxim Dounin
mdounin на mdounin.ru
Вс Июл 15 22:11:58 UTC 2018
Hello!
On Sat, Jul 14, 2018 at 11:20:59PM -0400, Ilya Evseev wrote:
> Имеется конфигурация с ~500-600 сайтов, из них примерно 10% с поддержкой
> https, в остальных только http.
> wildcard-ключ с сертификатом указан в блоке "http".
>
> Обратил внимание, что "nginx -t" и "nginx -s reload" стали отрабатывать
> секунд по 10.
>
> Профайлер говорит, что 90% времени уходит на ngx_http_ssl_merge_srv_conf =>
> ngx_ssl_certificates,
> количество вызовов у них одинаковое.
>
> Переместил сертификат в блоки "server", где используется ssl - nginx стал
> читать конфигурацию в несколько раз быстрее.
>
> Какой смысл проверять сертификаты для серверов без https?
> Можно ли отключить такую проверку?
В силу исторических причин на уровне server{} в момент merge'а
конфигурации неизвестно, может ли в него попасть HTTPS-соединение,
или нет. Скажем, вот в такой конфигурации HTTPS-соединение может
попасть и в сервер foo, и в сервер bar, но nginx об этом знает
только в сервере foo:
server {
listen 443;
server_name foo;
ssl on;
}
server {
listen 443;
server_name bar;
}
Соответственно признаком для того, что нужно создавать
SSL-контекст и загружать сертификаты служит собственно наличие
сертфикатов. Если SSL-сертификат в данном сервере задан (или
унаследован с уровня http) - то SSL-контекст создаётся. Если не
задан - не создаётся.
Начиная с 1.15.0 nginx ругается на наличие директивы "ssl", и
предлагает вместо неё использовать "listen ... ssl". Когда мы её
окончательно запретим - возможно, дойдут руки и до оптимизации
создания SSL-контекстов, благо при использовании "listen ... ssl"
это получается сделать несколько проще.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru