对我而言,有关如何ssl_session_cache
工作的Nginx文档尚不清楚。我想知道这是否:
ssl_session_cache shared:SSL:10m;
在http
块中或在每个 server
(即虚拟主机)块中声明,将导致1)一个名为SSL的单个全局高速缓存,大小为10 MB。或2)每台服务器一个10 MB的高速缓存,所有高速缓存的总大小= num服务器x 10 MB。
该文档:
共享
所有工作进程之间共享的缓存。缓存大小以字节为单位;一兆字节可以存储大约4000个会话。每个共享缓存应具有任意名称。具有相同名称的缓存可以在多个虚拟服务器中使用。
如果只有一个缓存,那么我想将其大小乘以服务器数量。因此,如果我有5台服务器(即5台虚拟主机),则将其放置ssl_session_cache
在http
块中并执行以下操作:
ssl_session_cache shared:SSL:50m; # 10 * 5 = 50
那么,问题就来了:ssl_session_cache shared:SSL:10m;
是为每台服务器创建一个10 MB的高速缓存,还是为所有服务器创建一个10 MB的高速缓存?
如果是每台服务器,那么没有办法为所有服务器配置一个全局缓存吗?(如果不可能,那么,如果有人知道的话,为什么不呢?)在我看来,这将导致更有效的内存使用。(因为一台服务器具有许多客户端,因此可以使用本来专用于当前可能有零客户端的其他服务器的内存。)
综观实施ssl_session_cache通过ngx_http_ssl_session_cache在nxg_http_ssl_module.c它创建了一个名为“SSL”一个共享内存区,即一个SSL会话缓存。随后对ssl_session_cache的任何调用都将检索先前配置的名为“ SSL”的共享内存区域,而不是创建一个新的共享内存区域(ngx_cycle.c中的cmp。ngx_shared_memory_add)。
可以通过为相同的名称配置不同的大小来轻松地验证这一点,如下所示:
...
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)
共享内存区域在这里添加:
sscf->shm_zone = ngx_shared_memory_add(cf, &name, n,
&ngx_http_ssl_module);
如您所见,不同name
导致创建不同的缓存。因此,一个可以有许多不同的共享内存缓存,每个缓存都有其自己的唯一名称。但是,每台服务器只能使用一个共享的SSL内存区域-结构shm_zone
上的每个SSL服务器配置只有一个ngx_http_ssl_srv_conf_t *sscf
。
tl; dr是否在http或服务器级别声明SSL会话高速缓存无关紧要。只要为缓存分配了相同的名称,就使用相同的缓存。为了防止错误消息传递给具有相同名称的缓存,必须始终使用相同的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句