<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">Добры день,<br id="lineBreakAtBeginningOfMessage"><div><br><blockquote type="cite"><div>On 11 Jul 2024, at 8:46 PM, Hennadii Makhomed <gmm@csdoc.com> wrote:</div><br class="Apple-interchange-newline"><div><div>On 11.07.2024 16:58, Roman Arutyunyan wrote:<br><br><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">stream {<br>    server {<br>        listen [::]:443 bind default_server ssl;<br>        listen 443 bind default_server ssl;<br>        ssl_reject_handshake on;<br>    }<br>}<br><br>при попытке его тестирования - получаю ошибку:<br><br># nginx -t<br>nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7<br>nginx: configuration file /etc/nginx/nginx.conf test failed<br><br>если в конфиге поменять слово stream на http<br>- тогда тестирование конфига происходит без проблем.<br><br>почему такое отличие, это ошибка в nginx? можно ли ее исправить,<br>чтобы директива ssl_reject_handshake вела себя одинаково,<br>и в контексте http и в контексте stream?<br></blockquote><br>Отличие в том, что в http есть дефолтные хендлеры, а в stream их нет т.к. семантика более общая.<br><br>Если в конфиге есть ssl_reject_handshake, то действительно можно было бы не требовать наличие хендлера.<br>Однако проверять такое очень неудобно. Переносить ошибку в рантайм тоже не хочется.<br></blockquote></blockquote><br><blockquote type="cite"><blockquote type="cite">В общем, наверное надо как-то улучшить, но хорошего способа пока не вижу. Будем иметь в виду, спасибо.<br></blockquote></blockquote><br><blockquote type="cite">В итоге перенесли проверку в рантайм:<br>https://hg.nginx.org/nginx/rev/072ca4906154<br>Теперь ssl_reject_handshake ведет себя одинаково в http и stream.<br>Спасибо за репорт.<br></blockquote><br><br>Роман, спасибо за фикс, но я предполагал другой вариант решения,<br>чтобы директива ssl_reject_handshake on; кроме того, что она делает<br>сейчас, еще и "под капотом", незаметно для пользователя добавляла бы<br>свой фиктивный дефолтный хендлер в блок server, чтобы не надо было бы<br>переносить проверку корректности конфигурации nginx в рантайм.<br></div></div></blockquote><div><br></div><div>Я не вижу большой проблемы в том что проверка перенесена в рантайм,</div><div>Как минимум, это может быть полезным в процессе разработки и тестирования.</div><div>Ну и нагружать ssl_reject_handshake тоже не хочется.</div><br><blockquote type="cite"><div><div>Заодно, еще можно было бы выдавать варнинг или ошибку, если в блоке<br>с директивой ssl_reject_handshake on; есть еще какие-то другие хендлеры,<br>кроме того, который неявно добавляет директива ssl_reject_handshake on;<br>потому что все остальыне хендлеры не будут иметь смысла<br>в такой ситуации и не будут нормально работать.<br></div></div></blockquote><br></div><div>Сейчас хендлеры не проверяются. Один модуль может переписать хендлер от другого модуля.</div><br><div>
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>----</div><div>Roman Arutyunyan</div><div>arut@nginx.com</div><div><br></div></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">

</div>
<br></body></html>