Добры день, > On 11 Jul 2024, at 8:46 PM, Hennadii Makhomed <g...@csdoc.com> wrote: > > On 11.07.2024 16:58, Roman Arutyunyan wrote: > >>>> stream { >>>> server { >>>> listen [::]:443 bind default_server ssl; >>>> listen 443 bind default_server ssl; >>>> ssl_reject_handshake on; >>>> } >>>> } >>>> >>>> при попытке его тестирования - получаю ошибку: >>>> >>>> # nginx -t >>>> nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7 >>>> nginx: configuration file /etc/nginx/nginx.conf test failed >>>> >>>> если в конфиге поменять слово stream на http >>>> - тогда тестирование конфига происходит без проблем. >>>> >>>> почему такое отличие, это ошибка в nginx? можно ли ее исправить, >>>> чтобы директива ssl_reject_handshake вела себя одинаково, >>>> и в контексте http и в контексте stream? >>> >>> Отличие в том, что в http есть дефолтные хендлеры, а в stream их нет т.к. >>> семантика более общая. >>> >>> Если в конфиге есть ssl_reject_handshake, то действительно можно было бы не >>> требовать наличие хендлера. >>> Однако проверять такое очень неудобно. Переносить ошибку в рантайм тоже не >>> хочется. > >>> В общем, наверное надо как-то улучшить, но хорошего способа пока не вижу. >>> Будем иметь в виду, спасибо. > >> В итоге перенесли проверку в рантайм: >> https://hg.nginx.org/nginx/rev/072ca4906154 >> Теперь ssl_reject_handshake ведет себя одинаково в http и stream. >> Спасибо за репорт. > > > Роман, спасибо за фикс, но я предполагал другой вариант решения, > чтобы директива ssl_reject_handshake on; кроме того, что она делает > сейчас, еще и "под капотом", незаметно для пользователя добавляла бы > свой фиктивный дефолтный хендлер в блок server, чтобы не надо было бы > переносить проверку корректности конфигурации nginx в рантайм.
Я не вижу большой проблемы в том что проверка перенесена в рантайм, Как минимум, это может быть полезным в процессе разработки и тестирования. Ну и нагружать ssl_reject_handshake тоже не хочется. > Заодно, еще можно было бы выдавать варнинг или ошибку, если в блоке > с директивой ssl_reject_handshake on; есть еще какие-то другие хендлеры, > кроме того, который неявно добавляет директива ssl_reject_handshake on; > потому что все остальыне хендлеры не будут иметь смысла > в такой ситуации и не будут нормально работать. Сейчас хендлеры не проверяются. Один модуль может переписать хендлер от другого модуля. ---- Roman Arutyunyan a...@nginx.com
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-ru