IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    nginx模块开发(57)—SSL非阻塞的分布式session cache

    cjhust发表于 2016-06-22 14:18:53
    love 0

    1、知识百科

    nginx将请求的处理过程划分为11个phase(阶段),相对于是对请求处理的一种抽象,便于定制处理过程。

    ngx_lua针对常用的阶段也实现了自己的阶段控制,总共有12个阶段,和nginx有相似(如rewrite、access、content、log阶段等)也有不同(如balancer、cert阶段等)。

    目前项目组有个需求,需要在SSL握手前添加一个session阶段(分布式session cache),用于优化如安卓终端访问https的速度(详见cloudflare的公开资料),具体实现可以参考ssl_certificate_by_lua 。

    session cache 的原理是使用 client hello 中的 session id 查询服务端的 session cache,如果服务端有对应的缓存,则直接使用已有的 session 信息提前完成握手,称为简化握手。

    session cache 的优点:

    (1)session id 是 TLS 协议的标准字段,市面上的浏览器全部都支持 session cache;

     

      session cache 的缺点:

      (1)需要消耗服务端内存来存储 session 内容;

    (2)目前的开源软件包括 nginx,apache 只支持单机多进程间共享缓存,不支持多机间分布式缓存,对于大型互联网公司而言,单机 session cache 几乎没有作用;

      备注:项目组希望通过解决session cache的缺点(2),即通过对 TLS 握手协议及服务器端实现的优化,支持全局的session cache,提升用户的访问速度,节省服务器计算资源。

    2、具体配置

    server {
        listen       443 default_server http2;
    
        ssl_certificate      ssl/cert.pem;
        ssl_certificate_key  ssl/cert.key;
    
        lua_check_client_abort off;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
    
        ssl_session_fetch_by_lua_file app/src/ ssl_session_fetch.lua;
        ssl_session_store_by_lua_file app/src/ssl_session_store.lua;
    }
    PS:目前项目组已经实现,如果大家有需要,可以一起讨论(由于细节太多,就不在该博客详述了)。




沪ICP备19023445号-2号
友情链接