On 27.06.2024 15:02, 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, то действительно можно было бы не
требовать наличие хендлера.
Однако проверять такое очень неудобно. Переносить ошибку в рантайм тоже не
хочется.
В общем, наверное надо как-то улучшить, но хорошего способа пока не вижу.
По сути, директива ssl_reject_handshake выполняет роль хендлера,
потому что эта директива завершает соединение еще на уровне SSL,
так что какой бы там внутри другой хендлер не был бы прописан -
он не сработает - до обработки им запроса дело просто не дойдет.
Хороший способ улучшить - отобразить это в коде, в явном виде.
В таком случае не нужно будет убирать обязательное требование
наличия хендлера и не нужно будет переносить ошибку в рантайм.
Можно так сделать?
--
Best regards,
Gena
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru