Roman Arutyunyan
July 11, 2024 12:54PM
Добры день,

> On 11 Jul 2024, at 8:46 PM, Hennadii Makhomed <gmm@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
arut@nginx.com




_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Gena Makhomed June 05, 2024 11:44AM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Roman Arutyunyan June 27, 2024 09:04AM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Roman Arutyunyan July 11, 2024 11:00AM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Hennadii Makhomed July 11, 2024 12:48PM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Roman Arutyunyan July 11, 2024 12:54PM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Hennadii Makhomed July 11, 2024 02:26PM

Re: nginx: [emerg] no handler for server in /etc/nginx/nginx.conf:7

Hennadii Makhomed July 16, 2024 05:58AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 79
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready