[PATCH] Keepalive: add new option "keepalive_ssl_respect_sni"

Maxim Dounin mdounin at mdounin.ru
Tue Mar 16 23:24:35 UTC 2021


On Tue, Mar 16, 2021 at 05:42:01PM +0300, geniuss99 wrote:

> > SSL sessions are cached in the context of the upstream{} block (or an implicit upstream when using an IP address or a DNS name)
> Oh, I didn't think of that. I guess this can be solved by patching the
> ngx_http_upstream_round_robin module and saving many sessions per each
> upstream peer.
> > No, thank you. The issues as observed in the tickets linked should be resolved by using distinct upstream blocks instead.
> So what was the reason you rejected the previous patch? Was it because
> of breaking ssl sessions caching mechanism?
> Or you just didn't see it fit for nginx from the design
> (architectural) point of view?

>From the design point of view, upstream{} blocks expect all 
connections to a peer to be equivalent.  At the same time,
these connections might be established with different 
connection-specific settings, such as:

- proxy_bind
- proxy_socket_keepalive
- proxy_ssl_certificate
- proxy_ssl_certificate_key
- proxy_ssl_ciphers
- proxy_ssl_conf_command
- proxy_ssl_crl
- proxy_ssl_name
- proxy_ssl_protocols
- proxy_ssl_server_name
- proxy_ssl_trusted_certificate
- proxy_ssl_verify
- proxy_ssl_verify_depth

Trying to conditionally "respect" some of these settings, such as 
proxy_ssl_name, by caching connections based on the name in 
addition to the peer's address, looks wrong.  The same applies to 
configurable caching key, as suggested in the previous patch.

I think that two principal approaches are possible here:

1. Respect all the existing connection-specific settings 
automatically, and avoid using cached connections and/or saved SSL 
sessions if any of the settings does not match.

2. Assume that the configuration is written in a way which 
prevents misuse of cached connections / saved SSL sessions.

Current approach is (2).  That is, connections to the same peer 
should be equivalent (in most cases this can be achieved by using 
distinct upstream blocks if you have to use different 
connection-specific settings), or keepalive connections shouldn't 
be enabled (and SSL session reuse should be disabled as 

Switching to (1) is possible, but will require significant effort, 
and have no obvious benefits for common configurations.

IMHO, the only compelling reason to implement (1) is introduction 
of some form of default keepalive connections cache, but this is 
not something nginx supports.

Maxim Dounin

More information about the nginx-devel mailing list