NGX_STREAM_UPS_CONF handling
Maxim Dounin
mdounin at mdounin.ru
Fri Oct 22 01:40:33 UTC 2021
Hello!
On Thu, Oct 21, 2021 at 12:20:21PM -0400, Benjamin Coddington wrote:
> Hi devs, I'm new here, be gentle.
>
> I'm hacking up a tls offloading proxy for sunrpc, getting up to speed on
> nginx codebase, but I'm sinking too much time into figuring something:
>
> I'd like to use a flag configuration directive within an upstream config
> stanza:
>
> static ngx_command_t
> ngx_stream_rpc_tls_commands[] = {
>
> { ngx_string("rpc_tls_client"),
> NGX_STREAM_SRV_CONF|NGX_STREAM_UPS_CONF|NGX_CONF_FLAG,
> ngx_conf_set_flag_slot,
> NGX_STREAM_SRV_CONF_OFFSET,
> offsetof(ngx_stream_rpc_tls_conf_t, client),
> NULL },
>
> ngx_null_command
> };
>
> .. but when I go to merge server configs, the value is always unset. The
> debugger showed me that the upstream module does its own pass at
>
> module->create_srv_conf
>
> and
>
> ngx_conf_parse()
>
> so the configuration, while set, isn't there in my merge server config
> function, it's somewhere else and I'm not sure how to access it.
>
> I'm at the point where it feels like I'm "doing it wrong". What's the
> correct way to have both NGX_STREAM_SRV_CONF|NGX_CONF_FLAG and
> NGX_STREAM_SRV_CONF|NGX_STREAM_UPS_CONF|NGX_CONF_FLAG directives in the same
> module that can be handled by the same module's configuration?
The upstream{} block is a separate entity which isn't subject for
configuration merging. Any initialization is expected to be
handled in the uscf->peer.init_upstream handler, as set by
balancers and called by the ngx_stream_upstream_init_main_conf().
For examples on how to use it, check various balancers code. In
particular, ngx_http_upstream_keepalive_module might be
interesting, as it provides several configuration directives.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx-devel
mailing list