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

Roman Arutyunyan arut на nginx.com
Чт Июл 11 14:58:53 UTC 2024


Добрый день,

> On 27 Jun 2024, at 5:02 PM, Roman Arutyunyan <arut на nginx.com> wrote:
> 
> Добрый день,.
> 
>> On 5 Jun 2024, at 7:41 PM, Gena Makhomed <gmm на csdoc.com> wrote:
>> 
>> Здравствуйте, All!
>> 
>> есть такой конфиг:
>> 
>> # cat /etc/nginx/nginx.conf
>> 
>> events {
>>    worker_connections 10240;
>> }
>> 
>> 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, то действительно можно было бы не требовать наличие хендлера.
> Однако проверять такое очень неудобно. Переносить ошибку в рантайм тоже не хочется.
> В общем, наверное надо как-то улучшить, но хорошего способа пока не вижу. Будем иметь в виду, спасибо.

> 
>> workaround: ошибки не будет, если в блок server
>> в блоке stream добавить совершенно не нужную в данном
>> случае и бесполезную директиву proxy_pass 127.0.0.1:443;
> 
> Проще добавить return.
> 
>> используется бинарная сборка nginx/1.27.0 с сайта nginx.org
>> 
>> # dnf info nginx
>> Name         : nginx
>> Epoch        : 1
>> Version      : 1.27.0
>> Release      : 2.el9.ngx
>> Architecture : x86_64
>> Source       : nginx-1.27.0-2.el9.ngx.src.rpm
>> From repo    : nginx-mainline
>> Summary      : High performance web server
>> URL          : https://nginx.org/
>> 
>> -- 
>> Best regards,
>> Gena
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru на nginx.org
>> https://mailman.nginx.org/mailman/listinfo/nginx-ru
> 
> ----
> Roman Arutyunyan
> arut на nginx.com <mailto:arut на nginx.com>

В итоге перенесли проверку в рантайм:

https://hg.nginx.org/nginx/rev/072ca4906154


Теперь ssl_reject_handshake ведет себя одинаково в http и stream.

Спасибо за репорт.

----
Roman Arutyunyan
arut на nginx.com




----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20240711/c64c08b6/attachment.htm>


Подробная информация о списке рассылки nginx-ru