NGINX ngx_http_addition_module 模塊響應體前后注入內容

一、模塊概述

  • 模塊名稱ngx_http_addition_module
  • 引入版本:自 0.7.9 起支持 addition_types,0.8.29 起支持“*”通配;
  • 功能:對符合 MIME 類型的響應,在響應體前后分別插入指定子請求 URI 返回的內容;
  • 默認狀態:未內置,需要編譯時加上 --with-http_addition_module

二、編譯啟用

# 假設已下載 nginx 源碼:
./configure --with-http_addition_module [其他參數...]
make
sudo make install

完成后可通過 nginx -V 查看是否出現 --with-http_addition_module 標志。

三、核心指令

1. add_before_body

add_before_body uri;
  • 作用:在主響應體內容前,發起子請求 uri,并將子請求返回的響應體插入主響應中;
  • 上下文httpserverlocation
  • 取消繼承:傳入空字符串 add_before_body ""; 即可清除上級配置的前置注入。

2. add_after_body

add_after_body uri;
  • 作用:在主響應體內容后,發起子請求 uri,并將子請求返回的響應體追加到主響應后;
  • 上下文:同上;
  • 取消繼承add_after_body "";

3. addition_types

addition_types mime-type ...;
  • 默認值:僅對 text/html 響應生效;
  • 擴展:可指定多種 MIME 類型,或使用 * 對任意類型生效(0.8.29+);
  • 上下文httpserverlocation

四、基本示例

http {server {listen 80;server_name example.com;# 對所有 text/html 響應,插入公共頭與腳location / {add_before_body /common/header.html;add_after_body  /common/footer.html;}# 子請求返回的數據,僅做純文本注入location = /common/header.html {default_type text/html;return 200 '<header><h1>歡迎訪問 Example</h1></header>';}location = /common/footer.html {default_type text/html;return 200 '<footer><p>&copy; 2025 Example.com</p></footer>';}}
}
  • 客戶端訪問 /index.html 時,NGINX 先讀取原始文件內容,再分別向 /common/header.html/common/footer.html 發起子請求,將兩者內容前后拼接后返回。

五、進階場景

1. 多類型注入

location /api/ {addition_types application/json text/plain;add_after_body  /injection/logging;
}

針對 JSON 接口或純文本接口,也可注入調試信息或埋點腳本。

2. 條件注入

利用 ifmap 等指令,按請求參數或 Header 控制是否注入:

map $arg_debug $do_add {default "";1       "/debug/info.html";
}location / {add_after_body $do_add;addition_types *;
}

當請求攜帶 ?debug=1 時,才將 /debug/info.html 內容追加至任意 MIME 類型響應后。

3. 與緩存配合

若子請求內容穩定,可借助 proxy_cachefastcgi_cache 緩存子請求,減少注入帶來的性能開銷。

六、性能與注意事項

  1. 子請求開銷
    • 每一次注入都伴隨子請求,可能增加延遲;建議將靜態注入內容放在內存 lua_shared_dict(OpenResty)或緩存模塊中。
  2. MIME 類型過濾
    • 默認僅對 text/html 注入;如果插入到二進制(如圖片、下載包)將損壞響應,務必通過 addition_types 精確限定,或使用 * 時結合條件判斷。
  3. 繼承與層級
    • http/server 級定義全局注入,location 可覆蓋:使用空參數清除繼承。
  4. 循環注入
    • 注意避免子請求 URI 又被自身注入,導致死循環;可通過精確 location = /uri 或在子請求中設置 add_before_body ""/add_after_body "" 取消注入。

七、總結

ngx_http_addition_module 提供了一種優雅的“響應體加料”手段,適合注入通用頁頭、頁腳、埋點腳本及調試信息等場景。得益于子請求機制,可靈活復用已有模板或動態生成內容。結合 addition_types、條件判斷與緩存優化,可在保證性能的前提下,實現高度可控的內容插入。希望本文示例與實踐建議,能幫助你快速上手該模塊,為你的 NGINX 服務增色添彩。

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

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

相關文章

半監督學習與強化學習的結合:新興的智能訓練模式

&#x1f4cc; 友情提示&#xff1a; 本文內容由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;創作平臺的gpt-4o-mini模型生成&#xff0c;旨在提供技術參考與靈感啟發。文中觀點或代碼示例需結合實際情況驗證&#xff0c;建議讀者通過官方文檔或實踐進一步確認其準…

復習Vue136~180

1.使用create-vue創建項目 npm init vuelatest 項目目錄和關鍵文件&#xff1a; new Vue() 創建一個應用實例 > createApp()、createRouter() createStore() 、將創建實例進行了封裝&#xff0c;保證每個實例的獨立封閉性。 禁用vue2的插件vuter 使用vue3的插件volar scrip…

QT采用mqtt進行通信(17.1)

文章目錄 1.試錯歷程2. qt5.8安裝3. 開始搞了4. 測試連接mqtt broker1.試錯歷程 嘗試過網上說的各種版本,官方庫和第三方庫,試過qt5.9.9, qt5.12, qt5.12.2, qt5.14 等各個版本,都能編譯通過,調用mqtt庫,但是都不能連接成功,真的是試吐了,不知道他們的為什么都能成功,…

西門子PLC結構化編程_水處理系統水泵多備多投

文章目錄 前言一、功能概述二、程序編寫1. 需求分析2. 編寫運行時間累計功能塊3. 創建自定義數據類型1. 時間排序數據類型2. 多備多投數據類型3. 多備多投切換數據類型 4. 編程1. 創建DB數據塊1. 多備多投數據塊2. 多備多投切換數據塊 2. 創建FB功能塊 三、程序調用總結 前言 …

QT:自定義ComboBox

實現效果: 實現combobox的下拉框區域與item區域分開做UI交互顯示。 支持4種實現效果,如下 效果一: 效果二: 效果三: 效果四: 實現邏輯: ui由一個toolbutton和combobox上下組合成,重點在于combobox。 我設置了4種枚舉,ButtonWithComboBox對應效果一;OnlyButt…

VS2022+OpenCasCade配置編譯

一、Open CASCADE Technology介紹及安裝&#xff08;windows10&#xff09; Open CASCADE Technology&#xff08;簡稱OCCT&#xff09;是一款開源的 3D CAD/CAM/CAE 軟件開發平臺&#xff0c;廣泛應用于工業設計、工程仿真、制造等領域。開源OCC對象庫是一個面向對象C類庫&…

【OSG學習筆記】Day 12: 回調機制——動態更新場景

UpdateCallback 在OpenSceneGraph&#xff08;OSG&#xff09;里&#xff0c;UpdateCallback是用來動態更新場景的關鍵機制。 借助UpdateCallback&#xff0c;你能夠實現節點的動畫效果&#xff0c;像旋轉、位移等。 NodeCallback osg::NodeCallback 是一個更通用的回調類&…

全新升級:BRAV-7601-T003高性能無風扇AI邊緣計算系統,助力智能未來!

在數字化與智能化飛速發展的今天&#xff0c;AI邊緣計算正成為各行各業的核心驅動力。BRAV-7601作為一款高性能無風扇AI邊緣計算系統&#xff0c;憑借其強大的硬件配置與豐富的擴展能力&#xff0c;為車路協同、特種車輛車載、機器視覺、醫療影像等領域提供了卓越的解決方案。最…

刪除 Git 遠程記錄并重新設置

刪除 Git 遠程記錄并重新設置 以下是在 Windows 平臺上刪除當前項目的 Git 遠程記錄并重新設置遠程存儲庫的步驟&#xff1a; 步驟一&#xff1a;查看當前遠程倉庫 首先&#xff0c;檢查當前設置的遠程倉庫&#xff1a; git remote -v這會顯示所有已配置的遠程倉庫及其 URL…

有哪些和PPT自動生成有關的MCP項目?

隨著AI技術的快速發展, Model Context Protocol(MCP) 作為一種連接大型語言模型(LLMs)與外部工具的開放協議,正在重塑自動化辦公領域。在PPT自動生成場景中,MCP通過標準化接口實現了AI模型與設計工具、數據源的無縫整合。以下從技術框架、項目案例、應用場景三個維度展開…

PostgreSQL psql 命令和常用的 SQL 語句整理

PostgreSQL psql 命令和常用的 SQL 語句整理 1、登錄PostgreSQL數據庫2、psql 命令3、數據庫操作4、模式操作5、表操作6、數據操作7、索引操作8、視圖操作9、權限操作 1、登錄PostgreSQL數據庫 在系統的命令行界面&#xff08;如 Windows 的 cmd 或者 PowerShell、Linux 的終端…

【unity游戲開發入門到精通——UGUI】文本輸入控件 —— InputField舊控件

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發——UGUI】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、文本輸入控件2、InputField舊文本輸入控件組成 一、InputField文本輸入…

獲得ecovadis徽章資格標準是什么?ecovadis評估失敗的風險

EcoVadis徽章資格標準 EcoVadis徽章是對企業在可持續發展&#xff08;環境、勞工與人權、商業道德、可持續采購&#xff09;方面表現的認可。獲得徽章需滿足以下條件&#xff1a; 完成評估&#xff1a; 企業必須完成EcoVadis的問卷評估&#xff0c;并提交所有必要文件。 評分…

Python初學 有差異的知識點總結(一)

目錄 一、基礎語法規則 1.注釋 2.代碼編寫 二、基礎語法 1.變量 2.數據類型 3.數據類型的轉換 &#xff08;1&#xff09;隱式轉換 &#xff08;2&#xff09;顯示轉換 4.標識符 5.運算符 6.字符串 &#xff08;1&#xff09;定義 &#xff08;2&#xff09;拼接 …

Java面試場景深度解析

Java面試場景深度解析 在互聯網大廠Java求職者的面試中&#xff0c;經常會被問到關于Java項目中的各種技術場景題。本文通過一個故事場景來展示這些問題的實際解決方案。 第一輪提問 面試官&#xff1a;馬架構&#xff0c;歡迎來到我們公司的面試現場。請問您對Java內存模型…

【數據可視化藝術·應用篇】三維管線分析如何重構城市“生命線“管理?

在智慧城市、能源管理、工業4.0等領域的快速發展中&#xff0c;地下管線、工業管道、電力通信網絡等“城市血管”的復雜性呈指數級增長。傳統二維管理模式已難以應對跨層級、多維度、動態變化的管線管理需求。三維管線分析技術應運而生&#xff0c;成為破解這一難題的核心工具。…

Spring-全面詳解(學習總結)

一&#xff1a;概述 1.1 為什么學 解決了兩個主要問題 1. 2 學什么 1.3 怎么學 二&#xff1a;系統架構 作用&#xff1a;web開發、微服務開發、分布式系統開發 容器&#xff1a;用于管理對象 AOP:面向切面編程&#xff08;不驚動原始程序下對其進行加強&#xff09; 事…

企業架構之旅(2):解鎖TOGAF ADM

文章目錄 一、什么是 TOGAF ADM二、TOGAF ADM 的關鍵階段架構愿景&#xff08;Phase A&#xff09;業務架構&#xff08;Phase B&#xff09;信息系統架構&#xff08;Phase C&#xff09;技術架構&#xff08;Phase D&#xff09;機會與解決方案&#xff08;Phase E&#xff0…

MySQL 中 SQL 語句的詳細執行過程

MySQL 中 SQL 語句的詳細執行過程 當一條 SQL 語句在 MySQL 中執行時&#xff0c;它會經歷多個階段的處理。下面我將詳細描述整個執行流程&#xff1a; 1. 連接階段 (Connection) 客戶端與 MySQL 服務器建立連接服務器驗證用戶名、密碼和權限連接器負責管理連接狀態和權限驗…

ETL架構、數據建模及性能優化實踐

ETL&#xff08;Extract, Transform, Load&#xff09;和數據建模是構建高性能數據倉庫的核心環節。下面從架構設計、詳細設計、數據建模方法和最佳實踐等方面系統闡述如何優化性能。 一、ETL架構設計優化 1. 分層架構設計 核心分層&#xff1a; 數據源層&#xff1a;對接O…