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

Hennadii Makhomed gmm на csdoc.com
Чт Июл 11 18:25:16 UTC 2024


On 11.07.2024 18:51, Roman Arutyunyan wrote:

>>>> Отличие в том, что в 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 тоже не хочется.

Но ведь изначально вы говорили, что "Переносить ошибку в рантайм
тоже не хочется", значит есть в этом варианте какие-то недостатки?

Если проверка в рантайме - то в процессе тестирования конфигурации
эту ошибку - "no handler for server" - обнаружить будет невозможно?

Проверка конфигурации "nginx -t" будет успешной, а ошибка будет уже
после того, как эта конфигурация, якобы "не содержащая ошибок" будет
применена и ошибка начнет возникать в процессе обработки запросов?

В процессе разработки и тестирования - это может быть и будет удобно,
но в процессе эксплуатации - это совсем неудобно, потому что хотелось
бы иметь возможность обнаруживать ошибки в конфигурации еще на стадии
выполнения "nginx -t", а не когда уже произошла замена конфигруации.

А то, что ssl_reject_handshake нагружена дополнительным кодом -
этого никто бы из пользователей nginx не заметил, и поведение
nginx было бы полностью одинаковым и для http и stream -
и ошибки "no handler for server" можно было бы обнаруживать
еще в процессе тестирования конфигурации, а не в рантайме.

Разве не так?

В чем же тогда преимущество того, что проверка перенесена в рантайм?

Поведение nginx теперь изменилось в худшую сторону, потому что те
ошибки, которые раньше определялись сразу в процессе тестирования
конфигурации - теперь уже будут обнаруживаться только в рантайме.

Не понятно, почему именно такой вариант решения этой проблемы
вы считаете наиболее целесообразным и наиболее оптимальным.


-- 
Best regards,
  Gena



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