ngx_http_core_merge_srv_conf

定義在 src\http\ngx_http_core_module.c

static char *
ngx_http_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
{ngx_http_core_srv_conf_t *prev = parent;ngx_http_core_srv_conf_t *conf = child;ngx_str_t                name;ngx_http_server_name_t  *sn;/* TODO: it does not merge, it inits only */ngx_conf_merge_size_value(conf->connection_pool_size,prev->connection_pool_size, 64 * sizeof(void *));ngx_conf_merge_size_value(conf->request_pool_size,prev->request_pool_size, 4096);ngx_conf_merge_msec_value(conf->client_header_timeout,prev->client_header_timeout, 60000);ngx_conf_merge_size_value(conf->client_header_buffer_size,prev->client_header_buffer_size, 1024);ngx_conf_merge_bufs_value(conf->large_client_header_buffers,prev->large_client_header_buffers,4, 8192);if (conf->large_client_header_buffers.size < conf->connection_pool_size) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"the \"large_client_header_buffers\" size must be ""equal to or greater than \"connection_pool_size\"");return NGX_CONF_ERROR;}ngx_conf_merge_value(conf->ignore_invalid_headers,prev->ignore_invalid_headers, 1);ngx_conf_merge_value(conf->merge_slashes, prev->merge_slashes, 1);ngx_conf_merge_value(conf->underscores_in_headers,prev->underscores_in_headers, 0);if (conf->server_names.nelts == 0) {/* the array has 4 empty preallocated elements, so push cannot fail */sn = ngx_array_push(&conf->server_names);
#if (NGX_PCRE)sn->regex = NULL;
#endifsn->server = conf;ngx_str_set(&sn->name, "");}sn = conf->server_names.elts;name = sn[0].name;#if (NGX_PCRE)if (sn->regex) {name.len++;name.data--;} else
#endifif (name.data[0] == '.') {name.len--;name.data++;}conf->server_name.len = name.len;conf->server_name.data = ngx_pstrdup(cf->pool, &name);if (conf->server_name.data == NULL) {return NGX_CONF_ERROR;}return NGX_CONF_OK;
}

函數作用

合并 HTTP 核心模塊的父級配置 parent,通常來自 http 塊)和子級配置 child,通常來自 server 塊),處理默認值、約束條件和 server_name 的規范化。


ngx_http_core_srv_conf_t *prev = parent;
ngx_http_core_srv_conf_t *conf = child;
ngx_str_t name;
ngx_http_server_name_t *sn;
  • prevconf 分別指向父級和子級的配置結構體。
  • name 用于臨時存儲處理后的 server_name
  • sn 是指向 server_names 數組元素的指針。

ngx_conf_merge_size_value(conf->connection_pool_size, prev->connection_pool_size, 64 * sizeof(void *));
  • 作用 :合并 connection_pool_size(連接內存池大小)。
  • 邏輯 :如果子配置未設置,繼承父配置;若父配置也未設置,使用默認值 64 * sizeof(void *)
  • 意義 :確保每個連接的內存池大小合理,避免內存浪費或不足。

ngx_conf_merge_size_value-CSDN博客

conf->connection_pool_size=-1
prev->connection_pool_size=-1

執行后

conf->connection_pool_size=512


ngx_conf_merge_size_value(conf->request_pool_size, prev->request_pool_size, 4096);
  • 作用 :合并 request_pool_size(請求內存池大小)
  • 默認值 :4096

conf->request_pool_size=-1
prev->request_pool_size=-1

執行后

conf->request_pool_size=4096
?


ngx_conf_merge_msec_value(conf->client_header_timeout, prev->client_header_timeout, 60000);
  • 作用 :合并 client_header_timeout(客戶端頭超時時間)
  • 默認值 :60,000 毫秒(60 秒)

ngx_conf_merge_msec_value-CSDN博客

?

conf->client_header_timeout=18446744073709551615? ?(無符號長整型 -1,表示未設置)
prev->client_header_timeout=18446744073709551615


執行后
conf->client_header_timeout=60000


ngx_conf_merge_size_value(conf->client_header_buffer_size, prev->client_header_buffer_size, 1024);
  • 作用 :合并 client_header_buffer_size(客戶端頭緩沖區大小)。
  • 默認值 :1024
    ?

conf->client_header_buffer_size=-1
prev->client_header_buffer_size=-1
執行后
conf->client_header_buffer_size=1024


ngx_conf_merge_bufs_value(conf->large_client_header_buffers, prev->large_client_header_buffers, 4, 8192);
  • 作用 :合并 large_client_header_buffers(大頭緩沖區配置)。
  • 默認值 :4 個緩沖區,每個 8KB。

ngx_conf_merge_bufs_value-CSDN博客

conf->large_client_header_buffers.num=0
conf->large_client_header_buffers.size=0
prev->large_client_header_buffers.num=0
prev->large_client_header_buffers.size=0
執行后
conf->large_client_header_buffers.num=4
conf->large_client_header_buffers.size=8192

?


if (conf->large_client_header_buffers.size < conf->connection_pool_size) {ngx_conf_log_error(...);return NGX_CONF_ERROR;
}

作用 :檢查 large_client_header_buffers 的大小是否 ≥ connection_pool_size

邏輯 :若不滿足,記錄錯誤并終止配置合并。

意義 :確保大頭緩沖區足夠容納連接內存池,避免內存越界。

conf->large_client_header_buffers.size=8192
conf->connection_pool_size=512

條件不成立


ngx_conf_merge_value(conf->ignore_invalid_headers, prev->ignore_invalid_headers, 1);

作用 :合并 ignore_invalid_headers(是否忽略無效頭)

默認值 :1(啟用)

ngx_conf_merge_value-CSDN博客

conf->ignore_invalid_headers=-1
prev->ignore_invalid_headers=-1
執行后
conf->ignore_invalid_headers=1

?


ngx_conf_merge_value(conf->merge_slashes, prev->merge_slashes, 1);

作用 :合并 merge_slashes(是否合并連續斜杠)。
默認值 :1(啟用)。

conf->merge_slashes=-1
prev->merge_slashes=-1
執行后
conf->merge_slashes=1


ngx_conf_merge_value(conf->underscores_in_headers, prev->underscores_in_headers, 0);

作用 :合并 underscores_in_headers(是否允許頭字段包含下劃線)

默認值 :0(禁用)

conf->underscores_in_headers=-1
prev->underscores_in_headers=-1
執行后
conf->underscores_in_headers=0

?


    if (conf->server_names.nelts == 0) {/* the array has 4 empty preallocated elements, so push cannot fail */sn = ngx_array_push(&conf->server_names);
#if (NGX_PCRE)sn->regex = NULL;
#endifsn->server = conf;ngx_str_set(&sn->name, "");}

作用 :若未配置 server_name,添加默認空名稱。

邏輯 :向 server_names 數組添加一個元素,名稱設為空字符串。

意義 :確保每個虛擬主機至少有一個 server_name(即使為空)。

此時

conf->server_names.nelts=1

條件不成立


    sn = conf->server_names.elts;name = sn[0].name;
  • 作用 :獲取第一個 server_name 的名稱。

此時

name.data=localhost


#if (NGX_PCRE)if (sn->regex) {name.len++;name.data--;} else
#endif

作用 :如果使用正則表達式(PCRE),調整名稱指針和長度。

邏輯 :正則表達式匹配的名稱可能以特殊字符(如 ~)開頭,需跳過。

此時

sn->regex=(nil)

條件不成立


    if (name.data[0] == '.') {name.len--;name.data++;}

作用 :處理通配符域名(如 .example.com)。

邏輯 :去掉開頭的點,轉換為 example.com,避免重復匹配。

此時

?name.data=localhost

條件不成立


    conf->server_name.len = name.len;conf->server_name.data = ngx_pstrdup(cf->pool, &name);if (conf->server_name.data == NULL) {return NGX_CONF_ERROR;}

作用 :規范化后的 server_name 存入配置。

邏輯 :使用 ngx_pstrdup 復制字符串到內存池新分配的內存

意義 :主 server_name 用于日志、錯誤信息等場景。

conf->server_name.len=9
conf->server_name.data=localhost


return NGX_CONF_OK;

?返回 NGX_CONF_OK

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74348.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uni-app:firstUI框架的選擇器Select改造,添加一個搜索的插槽

<fui-select :show"showSiteType" :options"siteTypeList" textKey"dict_label" title"請選擇站點類型" confirm"chooseSiteType" close"onCloseSiteType"><template v-slot:search><view><…

Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由

Debian/Ubuntu的networking的/etc/network/interfaces配置文件,如何配置route路由 在 Debian/Ubuntu 系統中&#xff0c;通過 /etc/network/interfaces 配置文件配置路由&#xff08;靜態路由或默認路由&#xff09;可以通過以下方式實現。以下是詳細配置方法及示例&#xff1…

天梯賽 L2-024 部落

一個并查集題目&#xff0c;難點就在于統計總人數&#xff0c;使用map即可&#xff0c;還有需要注意的是編號不一定是小于N的&#xff0c;小于10000的&#xff0c;需要注意。 #include<bits/stdc.h> using namespace std; const int N 10010; int fa[N]; int find(int …

uniapp 微信小程序 使用ucharts

文章目錄 前言一、組件功能概述二、代碼結構分析2.1 模板結構 總結 前言 本文介紹一個基于 Vue 框架的小程序圖表組件開發方案。該組件通過 uCharts 庫實現折線圖的繪制&#xff0c;并支持滾動、縮放、觸摸提示等交互功能。文章將從代碼結構、核心方法、交互實現和樣式設計等方…

Axure項目實戰:智慧運輸平臺后臺管理端-承運商管理(中繼器篩選)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! 課程主題:智慧運輸平臺后臺管理端 主要內容:承運商管理 應用場景:條件篩選、增刪改查操作、臺賬制作 案例展示: 正文內容: 承運商管理模塊主要解決平臺對承運商的管理,包括新增承運商作,審核承運商申請,修…

[論文筆記] Deepseek技術報告解讀: MLAMTP

1. RMSNorm 歸一化層 class RMSNorm(nn.Module):def __init__(self, dim: int, eps: float = 1e-8):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim)) # 可學習的縮放參數def _norm(self, x: torch.Tensor):return x * torch.rsqrt(x.pow(2).me…

八款內網電腦監控軟件:探尋適配企業需求的數字化監管方案組合

數字化辦公的時代背景下&#xff0c;企業管理面臨著前所未有的挑戰。如何實現對員工辦公行為的高效管理&#xff0c;確保網絡資源的合理利用&#xff0c;成為眾多企業決策者和高級管理人員亟待解決的重要問題。內網電腦監控軟件作為一種有效的管理工具&#xff0c;應運而生。本…

Flutter求助貼

報錯信息&#xff1a;The Dart VM Service was not discovered after 30 seconds. This is taking much longer than expected... 基本情況&#xff1a; 硬件&#xff1a;mac(15.3.1)&#xff0c;iPad(iOS 16.6),iPhone 16 pro(iOS 18.4) 項目環境 flutter&#xff1a;3.16…

React(九)React Hooks

初識Hook 我們到底為什么需要hook那? 函數組件類組件存在問題 函數組件存在的問題&#xff1a; import React, { PureComponent } from reactfunction HelloWorld2(props) {let message"Hello world"// 函數式組件存在的缺陷&#xff1a;// 1.修改message之后&a…

數據清洗的具體內容

&#xff08;一&#xff09;ETL介紹 “ETL&#xff0c;是英文Extract-Transform-Load的縮寫&#xff0c;用來描述將數據從來源端經過抽取&#xff08;Extract&#xff09;、轉換&#xff08;Transform&#xff09;、加載&#xff08;Load&#xff09;至目的端的過程。ETL一詞較…

【動手學深度學習】#7 現代卷積神經網絡

主要參考學習資料&#xff1a; 《動手學深度學習》阿斯頓張 等 著 【動手學深度學習 PyTorch版】嗶哩嗶哩跟李牧學AI 概述 硬件性能和大數據的發展為深度卷積神經網絡&#xff08;AlexNet&#xff09;的實現提供了條件。VGG首次將塊的思想用于搭建網絡。NiN將多層感知機應用在…

Jenkins + CICD流程一鍵自動部署Vue前端項目(保姆級)

git倉庫地址&#xff1a;參考以下代碼完成,或者采用自己的代碼。 南澤/cicd-test 拉取項目代碼到本地 使用云服務器或虛擬機采用docker部署jenkins 安裝docker過程省略 采用docker部署jenkins&#xff0c;注意這里的命令&#xff0c;一定要映射docker路徑&#xff0c;否則無…

使用 libevent 處理 TCP 粘包問題(基于 Content-Length 或雙 \r\n)

在基于 libevent 的 TCP 服務器開發中,處理消息邊界是常見需求。以下是兩種主流分包方案的完整實現: 一、基于 Content-Length 的分包方案 1.1 數據結構設計 typedef struct {struct bufferevent *bev;int content_length; // 當前消息的預期長度int received_bytes; //…

酶動力學預測工具CataPro安裝教程

簡介&#xff1a;預測酶動力學參數是酶發現和酶工程中的一項重要任務。在此&#xff0c;研究人員基于蛋白質語言模型、小分子語言模型和分子指紋&#xff0c;提出了一種名為 CataPro 的新酶動力學參數預測算法。該研究從 BRENDA 和 SABIO-RK 數據庫中收集了最新的轉化率&#x…

項目實戰:基于Spring WebFlux與LangChain4j實現大語言模型流式輸出

一、背景 在大語言模型&#xff08;LLM&#xff09;應用場景中&#xff0c;GPT-4等模型的響應生成往往需要數秒至數十秒的等待時間。傳統同步請求會導致用戶面對空白頁面等待&#xff0c;體驗較差。本文通過Spring WebFlux響應式編程與SSE服務器推送技術&#xff0c;實現類似打…

Go語言入門經典:數組與切片詳解

Go語言入門經典&#xff1a;數組與切片詳解 數組和切片是Go語言中兩種重要的數據結構。數組是一種固定長度的集合&#xff0c;而切片則是一種靈活的動態集合。本章將詳細講解數組和切片的定義、初始化、訪問元素、動態操作等內容&#xff0c;幫助讀者全面掌握這兩種數據結構。…

uniapp中如何用iconfont來管理圖標集成到我們開發的項目中

我們在開發不管小程序還是APP的過程中都會用到圖標這個東西,那么iconfont提供了對應的功能,怎么才能方便的集成到我們的小程序或者APP項目中,目標是方便調用并且方便管理。 首先注冊ICONFONT賬號 www.iconfont.cn中去注冊即可選擇我們需要的圖標如下 我們搜索我們需要的圖…

從實用的角度聊聊Linux下文本編輯器VIM

本文從實用的角度聊聊Vim的常用命令。何為實用&#xff1f;我舉個不實用的例子大家就明白了&#xff0c;用vim寫代碼。;) “vim是從 vi 發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富&#xff0c;在程序員中被廣泛使用&#xff0c;和Emacs并列成…

優化程序命名:提升專業感與用戶體驗

在軟件開發的廣闊天地中&#xff0c;程序命名這一環節常常被開發者們忽視。不少程序沿用著簡單直白、缺乏雕琢的名字&#xff0c;如同素面朝天的璞玉&#xff0c;雖不影響其核心功能的發揮&#xff0c;但卻在無形之中錯失了許多提升用戶印象與拓展應用場景的機會。今天&#xf…

LeetCode BFS解決最短路問題

廣度優先搜索(BFS, Breadth-First Search)是一種用于圖和樹結構的遍歷算法&#xff0c;特別適合解決無權圖的最短路徑問題。 算法思想&#xff1a; BFS從起始節點開始&#xff0c;按照"廣度優先"的原則&#xff0c;逐層向外擴展搜索&#xff1a; 先訪問起始節點的…