<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      nginx證書緩存功能

      本文分享自天翼云開發者社區《nginx證書緩存功能》.作者:云海

      背景:

      ssl證書之前是不支持公用的,不同的域名,如果引用同一本證書,是無法公用的,每個域名都要加載同一個證書,浪費內存

      新版本:

      在1.27.2版本中,nginx官方更新了ssl證書相關的實現,支持了ssl證書緩存共享。

      實現原理:

      在配置初始化時,初始了ssl證書緩存的紅黑樹:
      ngx_openssl_cache_create_conf -> ngx_rbtree_init

      在要獲取ssl證書時,通過如下接口獲取對應ssl證書:
      ngx_ssl_cache_fetch
      該接口的index參數可以傳遞不同的標記位,因為不同功能ssl證書有不同的創建釋放和引用增加處理
      不同功能ssl證書有如下定義:
      typedef struct {
          ngx_ssl_cache_create_pt     create;
          ngx_ssl_cache_free_pt       free;
          ngx_ssl_cache_ref_pt        ref;
      } ngx_ssl_cache_type_t;

      核心函數分析:
      void *
      ngx_ssl_cache_fetch(ngx_conf_t *cf, ngx_uint_t index, char **err,
          ngx_str_t *path, void *data)
      {
          uint32_t               hash;              // 用于存儲計算出的哈希值
          ngx_ssl_cache_t       *cache;             // 指向 SSL 緩存的指針
          ngx_ssl_cache_key_t    id;                // 緩存鍵,用于標識特定緩存項
          ngx_ssl_cache_type_t  *type;              // 緩存類型對象指針
          ngx_ssl_cache_node_t  *cn;                // 指向緩存節點的指針

          // 初始化緩存鍵(如失敗則返回 NULL)
          if (ngx_ssl_cache_init_key(cf->pool, index, path, &id) != NGX_OK) {
              return NULL;
          }

          // 獲取全局的 SSL 緩存對象
          cache = (ngx_ssl_cache_t *) ngx_get_conf(cf->cycle->conf_ctx,
                                                   ngx_openssl_cache_module);

          // 根據索引獲取對應的緩存類型
          type = &ngx_ssl_cache_types[index];

          // 計算緩存鍵的哈希值
          hash = ngx_murmur_hash2(id.data, id.len);

          // 在緩存中查找節點
          cn = ngx_ssl_cache_lookup(cache, type, &id, hash);
          if (cn != NULL) {
              // 如果找到節點,則調用類型的 ref 函數返回緩存值
              return type->ref(err, cn->value);
          }

          // 如果未找到,則分配一個新的緩存節點內存
          cn = ngx_palloc(cf->pool, sizeof(ngx_ssl_cache_node_t) + id.len + 1);
          if (cn == NULL) {
              return NULL; // 分配失敗,返回 NULL
          }

          // 初始化緩存節點的屬性
          cn->node.key = hash;                // 設置節點的哈希鍵
          cn->id.data = (u_char *)(cn + 1);   // 將 ID 數據存儲在分配內存之后
          cn->id.len = id.len;                // 設置 ID 長度
          cn->id.type = id.type;              // 設置 ID 類型
          cn->type = type;                    // 設置節點的類型指針

          // 復制緩存鍵數據
          ngx_cpystrn(cn->id.data, id.data, id.len + 1);

          // 調用類型的 create 函數創建緩存值
          cn->value = type->create(&id, err, data);
          if (cn->value == NULL) {
              return NULL; // 創建失敗,返回 NULL
          }

          // 將新節點插入到緩存的紅黑樹中
          ngx_rbtree_insert(&cache->rbtree, &cn->node);

          // 返回節點值的引用
          return type->ref(err, cn->value);
      }


      nginx官方此功能并沒有開關控制,是默認開啟的

      posted @ 2025-10-17 15:42  天翼云開發者社區  閱讀(141)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本中文一二区有码在线| 国产激情艳情在线看视频| 日韩成人一区二区三区在线观看 | 人妻另类 专区 欧美 制服| 国产成人综合在线观看不卡| 日韩视频中文字幕精品偷拍| 亚洲国产成人综合熟女 | 免费国产拍久久受拍久久| 午夜福利片一区二区三区| 亚洲男人的天堂在线观看| 精品在免费线中文字幕久久| 国产精品高清一区二区三区 | 九九热在线精品视频免费| 精品偷拍一区二区三区| 国产成人亚洲精品狼色在线| 亚洲成人av综合一区| 中文字幕国产原创国产| 精品国产一区二区色老头| 九九在线精品国产| 99福利一区二区视频| 日韩亚洲国产激情一区二区| 野外少妇被弄到喷水在线观看| 亚洲欧美在线一区中文字幕| 精品一区二区三区蜜桃麻豆| 亚洲色欲在线播放一区| 日韩人妻无码一区二区三区俄罗斯 | 甘洛县| 亚洲av一本二本三本| 好紧好湿太硬了我太爽了视频| 国产精品视频亚洲二区| 国产99视频精品免费视频76| 日本韩无专砖码高清观看| 亚洲国产成人无码av在线影院 | av大片在线无码免费| 亚洲人成绝网站色www| 老王亚洲AV综合在线观看| 国产极品精品自在线不卡| 国产日产亚洲系列av| 亚洲小说乱欧美另类| 国产成人精品午夜2022| 国产精品福利中文字幕|