对我来说,the Nginx docs about how ssl_session_cache
works ,有点不清楚。我想知道这是否:
ssl_session_cache shared:SSL:10m;
在 http
block 或 each server
(即虚拟主机) block 中声明,导致 1) 一个全局缓存名为 SSL,大小为 10 MB。或 2) 在每台服务器一个 10 MB 缓存中,所有缓存的总大小 = num servers x 10 MB。
文档:
shared
a cache shared between all worker processes. The cache size is specified in bytes; one megabyte can store about 4000 sessions. Each shared cache should have an arbitrary name. A cache with the same name can be used in several virtual servers.
如果只有一个缓存,那么我想将其大小乘以服务器数量。所以,如果我有 5 个服务器(即 5 个虚拟主机),那么我会在 http
block 中放置 ssl_session_cache
并且:
ssl_session_cache shared:SSL:50m; # 10 * 5 = 50
那么,问题是:ssl_session_cache shared:SSL:10m;
是为每台服务器创建一个 10 MB 缓存,还是为所有服务器创建一个 10 MB 缓存?
如果是每台服务器,那么有没有办法为所有服务器配置一个单一的全局缓存呢? (如果不可能,那为什么不呢,万一有人知道呢?)在我看来,这似乎会导致更有效的内存使用。 (因为一台服务器有很多客户端,然后可以使用内存,否则这些内存将专用于其他可能暂时有零客户端的服务器。)
最佳答案
查看 ngx_http_ssl_session_cache 在 nxg_http_ssl_module.c 中实现的 ssl_session_cache它创建一个名为“SSL”的共享内存区域,即一个 ssl session 缓存。对 ssl_session_cache 的任何后续调用都会检索先前配置的名为“SSL”的共享内存区域,而不是创建一个新区域(cmp.ngx_shared_memory_add in ngx_cycle.c)。
这可以通过为相同的名称配置不同的大小来轻松验证,如下所示:
...
ssl_session_cache shared:SSL:4m;
server {
...
ssl_session_cache shared:SSL:50m;
}
这会导致错误消息,例如:
[emerg] the size 52428800 of shared memory zone "SSL" conflicts with already declared size 4194304 in /etc/nginx/nginx.conf:37
详细信息(添加了 KajMagnus)
添加了共享内存区域 here :
sscf->shm_zone = ngx_shared_memory_add(cf, &name, n,
&ngx_http_ssl_module);
如您所见,不同的 name
会导致创建不同的缓存。因此,一个人可以拥有许多不同的共享内存缓存,每一个都有自己唯一的名称。但是,每个服务器只能使用一个共享的 SSL 内存区域 — 每个 SSL 服务器配置只有一个 shm_zone
,在 ngx_http_ssl_srv_conf_t *sscf
结构上。
长话短说 SSL session 缓存是在 http 级别还是在服务器级别声明并不重要。只要为缓存分配相同的名称,就使用相同的缓存。为防止具有相同大小的同名缓存出现错误消息,必须始终使用相同的大小。
关于ssl - 所有 Nginx 虚拟主机都可以共享同一个 ssl_session_cache 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262154/