[PATCH] Stream: allow servers with no handler

Sergey Kandaurov pluknet at nginx.com
Thu Jul 11 12:12:53 UTC 2024


> On 27 Jun 2024, at 17:33, Roman Arutyunyan <arut at nginx.com> wrote:
> 
> # HG changeset patch
> # User Roman Arutyunyan <arut at nginx.com>
> # Date 1719494996 -14400
> #      Thu Jun 27 17:29:56 2024 +0400
> # Node ID 252582428b60f3422aa3b25dac8cca94edd43c34
> # Parent  4fbc38ad3c8a8ed7986aaaa76b8aceda5ed70ef3
> Stream: allow servers with no handler.
> 
> Previously handlers were mandatory.  However they are not always needed.
> For example, a server configured with ssl_reject_handshake does not need a
> handler.  Such servers required a fake handler to pass the check.  Now handler
> absence check is moved to runtime.  If handler is missing, the connection is
> closed with 500 code.
> 
> diff --git a/src/stream/ngx_stream_core_module.c b/src/stream/ngx_stream_core_module.c
> --- a/src/stream/ngx_stream_core_module.c
> +++ b/src/stream/ngx_stream_core_module.c
> @@ -458,6 +458,13 @@ ngx_stream_core_content_phase(ngx_stream
>         return NGX_OK;
>     }
> 
> +    if (cscf->handler == NULL) {
> +        ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0,
> +                       "no handler for server");
> +        ngx_stream_finalize_session(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
> +        return NGX_OK;
> +    }
> +
>     cscf->handler(s);
> 
>     return NGX_OK;
> @@ -734,13 +741,6 @@ ngx_stream_core_merge_srv_conf(ngx_conf_
>         conf->resolver = prev->resolver;
>     }
> 
> -    if (conf->handler == NULL) {
> -        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
> -                      "no handler for server in %s:%ui",
> -                      conf->file_name, conf->line);
> -        return NGX_CONF_ERROR;
> -    }
> -
>     if (conf->error_log == NULL) {
>         if (prev->error_log) {
>             conf->error_log = prev->error_log;

Looks good.

-- 
Sergey Kandaurov


More information about the nginx-devel mailing list