最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx獲取客戶端真實IP的原理及配置方法

 更新時間:2025年04月27日 09:03:33   作者:李博帥  
在現(xiàn)代生產(chǎn)環(huán)境中,Nginx 作為反向代理服務(wù)器被廣泛應(yīng)用于服務(wù)的暴露與負載均衡,尤其是在面對公網(wǎng)訪問時,如何準確獲取并傳遞客戶端的真實 IP,成為開發(fā)與運維的重要課題,本文將詳細剖析 Nginx 獲取客戶端真實 IP 的原理、配置方法,需要的朋友可以參考下

引言

在現(xiàn)代生產(chǎn)環(huán)境中,Nginx 作為反向代理服務(wù)器被廣泛應(yīng)用于服務(wù)的暴露與負載均衡。尤其是在面對公網(wǎng)訪問時,通常會在 Nginx 前端部署 CDN 或云廠商負載均衡器,以提升訪問性能與安全性。如何準確獲取并傳遞客戶端的真實 IP,成為開發(fā)與運維的重要課題。

本文將詳細剖析 Nginx 獲取客戶端真實 IP 的原理、配置方法以及常用變量的使用場景,幫助您在不同協(xié)議與架構(gòu)下正確處理客戶端 IP。

反向代理與客戶端 IP 獲取的基本問題

默認情況下,Nginx 并不會自動修改或添加請求頭中的 X-Forwarded-For,這意味著:

  • 如果前端的負載均衡器或 CDN 不傳遞 X-Forwarded-For,Nginx 獲取到的客戶端 IP 實際上是負載均衡器的 IP。
  • 如果前端已經(jīng)傳遞了 X-Forwarded-For,Nginx 會原樣保留并轉(zhuǎn)發(fā)該請求頭。

因此,為確保后端服務(wù)能正確識別客戶端真實 IP,通常需要根據(jù)實際情況對請求頭進行配置和調(diào)整。

常用變量及其含義

理解 Nginx 的內(nèi)置變量對于正確配置至關(guān)重要,以下為關(guān)鍵變量解析:

$remote_addr

  • 表示與 Nginx 服務(wù)器建立連接的上一層代理或客戶端的 IP 地址。
  • 在 TCP 四層負載均衡場景下(開啟獲取客戶端真實 IP 功能),$remote_addr 通常是客戶端的真實 IP。
  • 在 HTTP 七層負載均衡場景下,$remote_addr 通常是負載均衡器或 CDN 的 IP,因為客戶端真實 IP 通過 X-Forwarded-For 傳遞。

$http_x_forwarded_for

  • 獲取請求頭中 X-Forwarded-For 的原始值,通常是前端負載均衡器或 CDN 添加的客戶端 IP 列表。
  • 該值可以包含一個或多個 IP 地址,多個 IP 用逗號分隔,從左到右依次表示客戶端真實 IP 及經(jīng)過的代理 IP。

$proxy_add_x_forwarded_for

  • Nginx 自帶的復(fù)合變量,用于追加當前連接的客戶端 IP($remote_addr)到已有的 X-Forwarded-For 列表中。
  • 若請求中沒有原始的 X-Forwarded-For,該變量值即為 $remote_addr
  • 例如,如果前端已經(jīng)傳遞了 X-Forwarded-For: 1.1.1.1,且 $remote_addr2.2.2.2,設(shè)置后為:X-Forwarded-For: 1.1.1.1, 2.2.2.2。

典型配置方法及應(yīng)用場景

在 Nginx 配置中傳遞客戶端真實 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

此配置可以在保持原有 X-Forwarded-For 值的基礎(chǔ)上,追加當前連接 IP,適用于多級代理鏈場景,方便后端服務(wù)追蹤來源鏈路。

直接覆蓋 X-Forwarded-For 頭

proxy_set_header X-Forwarded-For $remote_addr;

此配置會覆蓋前面?zhèn)鬟f的所有 X-Forwarded-For 信息,直接將當前連接的 IP 作為唯一值。

適用場景:

  • 您確信當前連接的 $remote_addr 是客戶端的真實 IP(如 TCP 四層負載均衡開啟真實 IP穿透時)。
  • 或者想避免鏈路傳遞過長或含有無用代理 IP 時重置 IP 信息。

保持負載均衡器傳遞的真實 IP

當前端負載均衡器已經(jīng)正確注入客戶端真實 IP 到 X-Forwarded-For,一般無需在 Nginx 反代層修改該頭部,直接轉(zhuǎn)發(fā)即可:

proxy_set_header X-Forwarded-For $http_x_forwarded_for;

或者默認不設(shè)置,Nginx 會自動將接收到的請求頭透傳。

不同協(xié)議和監(jiān)聽層級對 IP 的影響

  • TCP 四層監(jiān)聽(四層負載均衡):

    • 負載均衡器通過網(wǎng)絡(luò)層直接轉(zhuǎn)發(fā)流量,若開啟“獲取客戶端真實 IP”,則 $remote_addr 即真實客戶端 IP,X-Forwarded-For 通常不存在。
  • HTTP 七層監(jiān)聽(七層負載均衡):

    • 負載均衡器通過 HTTP 協(xié)議代理請求,將客戶端真實 IP 放進 X-Forwarded-For 頭部,$remote_addr 是負載均衡器實例 IP。

綜上,確定您的架構(gòu)和協(xié)議環(huán)境,是選擇合適真實 IP 獲取策略的前提。

Nginx 訪問日志中打印真實 IP

為了在日志中更準確地記錄客戶端的真實 IP,配置訪問日志時可使用:

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '"$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

其中,$http_x_forwarded_for 可顯示真實的客戶端 IP 鏈路,方便排查和分析。

安全防護建議

由于 X-Forwarded-For 頭容易被客戶端偽造,建議:

  • 只信任來自可信負載均衡/代理服務(wù)器的 IP 和 X-Forwarded-For
  • 使用 real_ip 模塊(ngx_http_realip_module)替換 $remote_addr 為真實客戶端 IP,配置如下:
set_real_ip_from 192.168.0.0/16;  # 代理服務(wù)器 IP 段
real_ip_header X-Forwarded-For;
real_ip_recursive on;

此配置確保后端應(yīng)用能夠獲得正確的 $remote_addr,并防止偽造。

總結(jié)

  • 理解負載均衡器的協(xié)議層級和“獲取客戶端真實 IP”功能對于正確配置 Nginx 與后端應(yīng)用至關(guān)重要。
  • $proxy_add_x_forwarded_for 是追加客戶端 IP 的最佳實踐,適合多級代理環(huán)境。
  • 通過 real_ip 模塊配置,可將真實客戶端 IP 映射到 $remote_addr,方便應(yīng)用處理。
  • 日志中打印 $http_x_forwarded_for 有助于追蹤多跳代理鏈路。

合理配置與使用這些變量,能幫助您在復(fù)雜的負載均衡與代理環(huán)境中準確獲取客戶端真實 IP,確保業(yè)務(wù)的穩(wěn)定運行和安全防護。

以上就是Nginx獲取客戶端真實IP的原理及配置方法的詳細內(nèi)容,更多關(guān)于Nginx獲取客戶端真實IP的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nginx優(yōu)化和模塊解讀

    Nginx優(yōu)化和模塊解讀

    本文介紹了Nginx的優(yōu)化配置與模塊應(yīng)用,涵蓋安裝、虛擬主機設(shè)置、location匹配、隱藏版本號、進程調(diào)整、文件限制等操作,并通過實驗驗證了gzip壓縮、緩存優(yōu)化、防盜鏈及HTTPS重定向等安全與性能改進措施
    2025-07-07
  • nginx提示:500 Internal Server Error錯誤解決辦法

    nginx提示:500 Internal Server Error錯誤解決辦法

    這篇文章主要介紹了 nginx提示:500 Internal Server Error錯誤解決辦法的相關(guān)資料,這里提供了解決該問題的詳細步驟,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • WebSocket 配置與Nginx 的完美結(jié)合(過程詳解)

    WebSocket 配置與Nginx 的完美結(jié)合(過程詳解)

    本文詳細介紹了如何在Nginx中配置WebSocket,確保其在生產(chǎn)環(huán)境中的性能與穩(wěn)定性,從安裝Nginx開始,到基本配置的設(shè)定,再到重啟Nginx應(yīng)用配置,同時,介紹了多種驗證WebSocket配置正確性的方法,如使用瀏覽器的開發(fā)者工具、wscat測試工具及編寫客戶端代碼
    2024-11-11
  • nginx代理后端路徑獲取IP為127.0.0.1問題

    nginx代理后端路徑獲取IP為127.0.0.1問題

    文章討論了在使用Nginx作為反向代理時,如何正確配置以避免在前端路徑A/api訪問后端時丟失真實的IP地址,通過有效的Nginx配置,可以確保在前后端分離的場景中,客戶端通過前端路徑訪問后端時,后端能夠正確獲取客戶端的真實IP地址,示例配置展示了如何實現(xiàn)這一目標
    2025-02-02
  • Nginx?upstream使用教程

    Nginx?upstream使用教程

    本文主要介紹了Nginx?upstream使用教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 本地HTTPS環(huán)境搭建的完整步驟記錄

    本地HTTPS環(huán)境搭建的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于本地HTTPS環(huán)境搭建的相關(guān)資料,文中通過示例代碼將實現(xiàn)的步驟一步步介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 在Nginx服務(wù)器上安裝配置博客程序Typecho的教程

    在Nginx服務(wù)器上安裝配置博客程序Typecho的教程

    這篇文章主要介紹了在Nginx服務(wù)器上安裝配置博客程序Typecho的教程,Typecho是一個開源的PHP博客程序,比WordPress更加輕量,需要的朋友可以參考下
    2015-12-12
  • Nginx map實現(xiàn)基于客戶端 IP 段的動態(tài)后端路由的幾種方法實現(xiàn)

    Nginx map實現(xiàn)基于客戶端 IP 段的動態(tài)后端路由的幾種方法實現(xiàn)

    這篇文章主要介紹了Nginx map實現(xiàn)基于客戶端 IP 段的動態(tài)后端路由的幾種方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • CentOS 6.3安裝配置Nginx方法

    CentOS 6.3安裝配置Nginx方法

    這篇文章主要介紹了CentOS 6.3安裝配置Nginx方法,需要的朋友可以參考下
    2014-11-11
  • 利用Nginx代理如何解決前端跨域問題詳析

    利用Nginx代理如何解決前端跨域問題詳析

    這篇文章主要給大家介紹了關(guān)于利用Nginx代理如何解決前端跨域問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評論

泰和县| 东辽县| 榆树市| 区。| 成武县| 枣庄市| 崇明县| 芦溪县| 青海省| 黄浦区| 华亭县| 南漳县| 漯河市| 格尔木市| 岐山县| 凤台县| 丰都县| 沙河市| 鹿泉市| 广宗县| 信阳市| 漳州市| 鄂伦春自治旗| 钟祥市| 阿巴嘎旗| 衡南县| 全椒县| 浮梁县| 古浪县| 龙泉市| 高雄市| 镇康县| 大宁县| 阿鲁科尔沁旗| 射阳县| 莒南县| 苏尼特左旗| 简阳市| 唐海县| 子洲县| 泗阳县|