nginxx-forwarded-for使用教程

一、 Forwarded For是什麼?

在理解nginxx-forwarded-for之前,我們先了解一下Forwarded For。

簡單的說,當我們通過代理訪問網站時,網站只會記錄代理伺服器的IP地址,這樣會影響我們運維的判斷和處理方式,於是就有了Forwarded For這個標準。

它允許代理伺服器在數據包頭部加入「X-Forwarded-For」的欄位,用於記錄原始請求的客戶端真實IP地址。

二、為什麼要使用nginxx-forwarded-for?

如果你的架構中使用了nginx這個反向代理伺服器,而且又想記錄用戶的真實IP地址,那麼就要使用nginxx-forwarded-for配置來保存這個信息。

nginx默認只保存最後一個代理伺服器的IP地址,而沒有保存前面的IP地址信息,因此它不能完整記錄用戶的信息。為此,nginx的官方提供了一個設置,即ngx_http_realip_module。

ngx_http_realip_module模塊只在HTTP請求的第一個請求頭中包含一個IP地址,並且它只改變IP地址。

當啟用這個模塊後,如果客戶端經過代理伺服器訪問應用,則可以通過nginx的標準變數(如access_log,ngx_http_limit_req_module等),將它們的真正公網IP地址轉嫁回應用。

三、怎麼使用nginxx-forwarded-for?

1. 安裝ngx_http_realip_module模塊

如果安裝了完整版nginx,則可以通過檢查所有已默認安裝模塊列表來檢查是否已安裝ngx_http_realip_module:

“`
./configure –help | grep realip
“`

如果看到了–with-http_realip_module的選項,並且這個選項已啟用,則表示已將ngx_http_realip_module模塊包含到nginx進程中。

如果沒有啟用,則必須重新編譯nginx,啟用它,或使用其他軟體源重新安裝該軟體,帶有ngx_http_realip_module模塊的nginx。

2. 配置nginx.conf文件

“`
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_recursive on;
}
“`

在http{…}內配置,配置real_ip_header,告訴nginx使用哪個請求頭來讀取客戶端真實IP地址。 標準填寫為X-Forwarded-For。

set_real_ip_from用於指定信任的代理伺服器的IP或範圍。如果設置為空,則視為代理伺服器具有等同於客戶端的權威性,容易受到惡意定義的X-Forwarded-For攻擊。

real_ip_recursive,默認情況下,ngx_http_realip_module模塊的真正的轉發人IP地址是從客戶端或從最後一個代理伺服器的IP地址中獲取的,另一個代理伺服器的IP地址是不能獲取的,如果要獲取,需要開啟這一設置。

四、小結

若要獲取客戶端真實IP,則需要使用ngx_http_realip_module 模塊。ngx_http_realip_module 模塊在經過代理伺服器時,支持從http請求頭X-Forwarded-For中獲取客戶端真實IP,並將客戶端真實IP保存到nginx標準變數中。

因此,如果你的應用有代理伺服器的話,請建議節省時間,並建議使用ngx_http_realip_module mod。

原創文章,作者:VTIGU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334505.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VTIGU的頭像VTIGU
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • Python for循環求1到100的積

    Python中的for循環可以方便地遍歷列表、元組、字典等數據類型。本文將以Python for循環求1到100的積為中心,從多個方面進行詳細闡述。 一、for循環語法 Pytho…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python使用for循環列印99乘法表用法介紹

    本文介紹如何使用python的for循環語句來列印99乘法表,我們將從需要的基本知識、代碼示例以及一些加強版來詳細講解。 一、基礎知識 在學習如何使用for循環列印99乘法表之前,…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29

發表回復

登錄後才能評論