On Saturday, April 9, 2016 at 3:31:10 PM UTC+8, ljianchao wrote:
我现在在做一些有关https方面的优化工作,需要在nginx上对TLS的复用率进行提高,但是nginx的ssl_session_cache只支持单机,无法在nginx集群间进行共享,所以需要做分布式 Session Cache的方案,需要用redis进行缓存。但是,我目前对redis中去缓存哪些内容不太清楚,如session id,密钥等?nginx的ssl_session_cache的缓存机制也不太明白。假如去redis中读取了缓存的内容,如何去打断nginx进行建连,使用我们缓存的会话?是否可以在”ssl_certificate_by_lua“模块中进行处理?如何进行处理?
我给春哥发了一封邮件,春哥回复我OpenResty 中开源的 ssl_session_fetch_by_lua* 和ssl_session_store_by_lua* 正是针对 SSL session 的非阻塞的分布式缓存需求的,估计要在这个月或下个月放出来。
希望大家有类似需求和已经实现的伙伴们分享下。
我做过类似的方案。
TLS 的 Session 的复用包括 Session ID 和 Session Ticket 的方式,我的思路和百度,Cloudflare 的类似。对于 Session ID 使用的是 Nginx + Redis Proxy + Redis Cluster ,需要修改 OpenSSL 为异步,修改原来 Nginx 中对 Session ID 的处理逻辑;Session Ticket 的方案类似 Twitter 但优于 Twitter 的方案,所有前端共享一个 Ticket Key , 且周期性的更新。 由于公司的历史原因,这部分工作我是在 Tengine 上做的,如果你们的接入前端没有复杂的背景(各种历史模块之类的)的话,考虑到开发周期,不如你直接等 OpenResty 开源 ssl_session_fetch_by_lua 和 ssl_session_store_by_lua 这两个 directive 吧。