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