ngx_http_realip_module 模塊概述

一、使用場景

  • 日志記錄
    記錄真實客戶端 IP 而非反向代理的 IP,有助于流量分析和安全審計。
  • 訪問控制
    基于真實 IP 實現防火墻規則(allow/deny)或限流,而非誤將上游 IP 視為客戶端。
  • GeoIP、WAF、限速等功能
    模塊化的上游真實 IP 支持與諸如 ngx_http_geoip_modulelimit_req、WAF 插件等配合使用。

二、示例配置

http {# 信任的上游地址列表(CIDR、單 IP 或 unix 域 socket)set_real_ip_from  192.168.1.0/24;set_real_ip_from  10.0.0.0/8;set_real_ip_from  unix:;# 指定從哪個請求頭獲取真實地址# 常見的有:X-Real-IP、X-Forwarded-For、proxy_protocolreal_ip_header    X-Forwarded-For;# 開啟遞歸模式時,將跳過鏈中信任的上游,選取第一個非信任地址real_ip_recursive on;server {listen 80;location / {# 此時 $remote_addr 是真實客戶端 IPproxy_pass http://backend;}}
}

三、指令詳解

1. set_real_ip_from

Syntax:   set_real_ip_from address | CIDR | unix:;
Default:  —;
Context:  http, server, location
  • address | CIDR:IPv4/IPv6 網絡或單地址,如 192.168.2.12001:db8::/32
  • unix::信任所有 UNIX 域套接字連接。
  • 用途:指定哪些上游代理地址可信,只有來自這些源的請求頭中攜帶的 IP 才會被視為真實客戶端。

注意

  • 支持主機名(1.13.1 起),解析后再進行匹配。
  • IPv6 支持自 1.2.1/1.3.0 起。

2. real_ip_header

Syntax:   real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol;
Default:  real_ip_header X-Real-IP;
Context:  http, server, location
  • field:HTTP 請求頭名,常見有 X-Real-IPX-Forwarded-For
  • proxy_protocol:從 PROXY 協議頭部獲取地址,需先在 listen 中啟用 proxy_protocol
  • 端口替換:若頭部中同時包含 IP:PORT,則還可替換 $remote_port

3. real_ip_recursive

Syntax:   real_ip_recursive on | off;
Default:  real_ip_recursive off;
Context:  http, server, location
  • off(默認):取請求頭最末尾(最后一個)IP,只要發現第一個可信代理,即替換為該代理后面的 IP。
  • on:遞歸查找,跳過所有可信代理,取第一個非信任地址,適用于多級反代場景。

四、內置變量

變量含義
$realip_remote_addr原始客戶端 IP(被替換前的 $remote_addr
$realip_remote_port原始客戶端端口(被替換前的 $remote_port

這些變量可用于日志或者后續條件判斷,方便同時保留“原始代理IP”與“替換后真實IP”。

五、處理流程

  1. 接收請求
    Nginx 監聽到請求,初始 $remote_addr 為 TCP 連接的對端地址。

  2. 匹配可信源
    檢查該地址是否在任一 set_real_ip_from 列表中。

  3. 提取頭部值
    讀取 real_ip_header 指定的頭部字段,按逗號拆分(若是 X-Forwarded-For,可能包含多級 IP)。

  4. 選取 IP

    • real_ip_recursive off:取列表末尾(最后一個)IP;
    • real_ip_recursive on:倒序遍歷,跳過可信源,取第一個非信任 IP。
  5. 替換地址
    更新 $remote_addr(及可選 $remote_port),并記錄舊值至 $realip_remote_addr

  6. 繼續其它模塊處理
    后續日志、WAF、限速等模塊均以新的 $remote_addr 為準。

六、常見注意事項

  • 安全性
    僅信任可信網絡或反向代理,避免客戶端偽造 X-Forwarded-For 欺騙源 IP。
  • 多級代理
    開啟 real_ip_recursive on 以正確獲取最初客戶端 IP;否則僅能獲取到第一級代理前的 IP。
  • PROXY 協議
    使用 proxy_protocol 時,需要在 listen ... proxy_protocol; 中啟用,并由上游(如 LVS、HAProxy)發送 PROXY 首部。
  • 端口保留
    若需要真實端口信息,可在頭部中附加 <ip>:<port> 格式,并確保 Nginx 版本 ≥1.11.0。

通過 ngx_http_realip_module,可以在 Nginx 層面安全、靈活地恢復原始客戶端 IP 和端口,為日志、限流、安全防護等功能提供可靠的基礎。

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

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

相關文章

實戰5:個性化數字藝術生成與銷售

盈利思路 數字藝術銷售&#xff1a; 平臺銷售&#xff1a;將生成的數字藝術作品上傳到像OpenSea、Foundation等NFT平臺進行售賣。每一件獨特的藝術品可以通過NFT技術保證其唯一性&#xff0c;吸引收藏家和投資者。 定價策略&#xff1a;根據作品的復雜度、創意性以及市場需求來…

游戲引擎學習第303天:嘗試分開對Y軸和Z軸進行排序

成為我們自己的代碼精靈α 所以現在應該可以正常使用了。不過&#xff0c;這兩周我們沒辦法繼續處理代碼里的問題&#xff0c;而之前留在代碼里的那個問題依然存在&#xff0c;沒有人神奇地幫我們修復&#xff0c;這讓人挺無奈的。其實我們都希望有個神奇的“代碼仙子”&#…

InetAddress 類詳解

InetAddress 類詳解 一、核心作用 封裝 IP 地址&#xff1a;同時支持 IPv4 和 IPv6 地址域名解析&#xff1a;將域名轉換為 IP 地址&#xff08;DNS 查詢&#xff09;地址驗證&#xff1a;檢查網絡地址的有效性無構造方法&#xff1a;通過靜態工廠方法獲取實例 二、核心方法 …

spring cloud alibaba-Geteway詳解

spring cloud alibaba-Gateway詳解 Gateway介紹 在 Spring Cloud Alibaba 生態系統中&#xff0c;Gateway 是一個非常重要的組件&#xff0c;用于構建微服務架構中的網關服務。它基于 Spring Cloud Gateway 進行擴展和優化&#xff0c;提供了更強大的功能和更好的性能。 Gat…

iOS 直播技術及優化

iOS直播技術的實現和優化涉及多個技術環節&#xff0c;需結合協議選擇、編解碼方案、播放器技術及性能調優等多方面。 一、核心技術實現 協議選擇與傳輸優化 HLS&#xff08;HTTP Live Streaming&#xff09;&#xff1a;蘋果官方推薦&#xff0c;基于HTTP分片傳輸&#xff0c…

目標檢測135個前沿算法模型匯總(附源碼)!

目標檢測是計算機視覺核心方向之一&#xff0c;也是發論文的熱門領域&#xff01; 近來不僅YOLO算法迎來了新突破&#xff0c;迭代出YOLOv12&#xff01;Mamba、大模型等新技術的發展&#xff0c;也給該領域注入了全新的力量&#xff0c;取得了諸多顯著成果。比如性能飆升82.3…

期刊采編系統安裝升級錯誤

我們以ojs系統為例&#xff1a; PHP Fatal error: Uncaught Error: Call to a member function getId() on null in /esci/data/html/classes/install/Upgrade.inc.php:1019 Stacktrace: #0 /esci/data/html/lib/pkp/classes/install/Installer.inc.php(415): Upgrade->con…

淺談無服務器WebSocket的優勢

實際上&#xff0c;一個實用的解決方案是將構建業務關鍵型實時平臺的復雜性卸載到專門的云服務中。 完全托管的無服務器 WebSocket 解決方案為事件驅動的消息傳遞提供了基礎結構;它使底層基礎設施成為一種商品。客戶端使用提供程序服務發送/接收低延遲消息&#xff0c;并專注于…

Python數據可視化高級實戰之二——熱力圖繪制探究

目錄 一、熱力圖的作用 二、熱力圖反映的信息類型 三、熱力圖的典型應用場景 1. 地球信息系統 (GIS) 2. 城市交通分析 3. 市場分析 4. 用戶行為分析 5. 網絡流量分析 6. 傳染病傳播分析 7. 社交媒體輿情分析 四、Python 繪制熱力圖的關鍵技術要點 1. 數據預處理 2. 顏色選擇與漸…

配電網運行狀態綜合評估方法研究

1評估指標體系的構建 [1]冷華,童瑩,李欣然,等.配電網運行狀態綜合評估方法研究[J].電力系統保護與控制,2017,45(01):53-59. 1.1評估范圍 圖1為配電系統組成示意圖&#xff0c;其中A、B、C分別表示高、中、低壓配電系統。高壓配變(也稱主變)將35kV或110kV的電壓降到10kV&#…

Docker安裝MinIO對象存儲中間件

MinIO 是一個高性能、分布式的對象存儲系統&#xff0c;兼容 Amazon S3 云存儲服務協議&#xff0c;廣泛應用于企業存儲、大數據、機器學習和容器化應用等領域。以下是詳細介紹&#xff1a; 核心特點 兼容 S3 API &#xff1a;全面兼容 Amazon S3 API&#xff0c;這意味著使用…

HTML回顧

html全稱:HyperText Markup Language(超文本標記語言) 注重標簽語義,而不是默認效果 規則 塊級元素包括: marquee、div等 行內元素包括: span、input等 規則1:塊級元素中能寫:行內元素、塊級元素(幾乎什么都能寫) 規則2:行級元素中能寫:行內元素,但不能寫:塊…

JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表連查

目錄 注解總結 將傳送到客戶端的數據轉成json數據 **描述一下Spring MVC的工作流程** 1。屬性賦值 BeanUtils.copyProperties(addUserDTO,user); 添加依賴&#xff1a; spring web、mybatis framework、mysql driver Controller和ResponseBody優化 直接改成RestControl…

H2數據庫中一條insert語句到生成java對象到數據寫入磁盤的完整步驟

H2 數據庫將 SQL 語句轉換為磁盤存儲的全過程可以分為以下 8 個關鍵步驟&#xff0c;我們以 INSERT INTO users (id, name) VALUES (1, Alice) 為例詳細說明&#xff1a; 1. SQL 解析與語法樹生成 詞法分析&#xff1a;拆分語句為 INSERT、INTO、users 等 Token語法分析&#…

重磅升級!Google Play商店改版上線

5 月 21 日消息&#xff0c;Android Headline 今天&#xff08;5 月 21 日&#xff09;發布博文&#xff0c;報道稱在 2025 年 I/O 開發者大會上&#xff0c;谷歌宣布更新 Google Play 應用商店&#xff0c;在優化用戶體驗的同時&#xff0c;提升開發者收益。 本次更新中&…

Docker面試題(1)

什么是Docker 一個容器化平臺 形式是容器 將你的應用程序及所有依賴項打包在一起 確保應用程序在任何環境中無縫運行 什么是Docker鏡像 Docker鏡像是Docker容器的源代碼 用于創建容器 使用build命令創建鏡像 什么是 Docker容器 包括應用程序及所有的依賴項 作為操作系統的獨立進…

Ulisses Braga-Neto《模式識別和機器學習基礎》

模式識別和機器學習基礎 [專著] Fundamentals of pattern recognition and machine learning / (美)烏利塞斯布拉加&#xff0d;內托(Ulisses Braga-Neto)著 ; 潘巍[等]譯 推薦這本書&#xff0c;作者有自己的見解&#xff0c;而且提供代碼。問題是難度高&#xff0c;對于初學…

RabbitMQ的簡介

三個概念 生產者&#xff1a;生產消息的服務消息代理&#xff1a;消息中間件&#xff0c;如RabbitMQ消費者&#xff1a;獲取使用消息的服務 消息隊列到達消費者的兩種形式 隊列&#xff08;queue&#xff09;:點對點消息通信&#xff08;point-to-point&#xff09; 消息進入隊…

自動切換剪貼板路徑中反斜杠為正斜杠

有時候需要將我們常見的win全路徑中反斜杠為正斜杠&#xff0c;每次用記事本&#xff0c;編輯替換非常麻煩&#xff0c;于是寫了這個工具&#xff0c;能自動修改剪貼板中的數據&#xff0c;只需要運行一下即可。 實現效果&#xff0c;將類似于下面的路徑&#xff1a; C:\User…

【時時三省】Python 語言----文件

目錄 1,文件打開 2, 文件關閉 3, 文件寫入 4, 文件讀出 5, 文件定位 6, 文件重命名 7, 復制文件 山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省 1,文件打開 file = open(file, mode, buffering, encoding, errors, newline, closefd, opener) 2, 文…