欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

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

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

默認(rèn)情況下,Nginx 并不會(huì)自動(dòng)修改或添加請(qǐng)求頭中的 X-Forwarded-For,這意味著:

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

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

常用變量及其含義

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

$remote_addr

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

$http_x_forwarded_for

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

$proxy_add_x_forwarded_for

  • Nginx 自帶的復(fù)合變量,用于追加當(dāng)前連接的客戶端 IP($remote_addr)到已有的 X-Forwarded-For 列表中。
  • 若請(qǐng)求中沒有原始的 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)用場(chǎng)景

在 Nginx 配置中傳遞客戶端真實(shí) IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

直接覆蓋 X-Forwarded-For 頭

proxy_set_header X-Forwarded-For $remote_addr;

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

適用場(chǎng)景:

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

保持負(fù)載均衡器傳遞的真實(shí) IP

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

proxy_set_header X-Forwarded-For $http_x_forwarded_for;

或者默認(rèn)不設(shè)置,Nginx 會(huì)自動(dòng)將接收到的請(qǐng)求頭透?jìng)鳌?/p>

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

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

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

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

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

Nginx 訪問日志中打印真實(shí) IP

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

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 可顯示真實(shí)的客戶端 IP 鏈路,方便排查和分析。

安全防護(hù)建議

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

  • 只信任來自可信負(fù)載均衡/代理服務(wù)器的 IP 和 X-Forwarded-For。
  • 使用 real_ip 模塊(ngx_http_realip_module)替換 $remote_addr 為真實(shí)客戶端 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é)

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

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

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

相關(guān)文章

  • Linux系統(tǒng)下nginx日志每天定時(shí)切割的腳本寫法

    Linux系統(tǒng)下nginx日志每天定時(shí)切割的腳本寫法

    本篇文章給大家分享使用Linux系統(tǒng)自帶的命令logrotate對(duì)Nginx日志進(jìn)行切割的方法,對(duì)nginx日志切割腳本感興趣的朋友一起學(xué)習(xí)吧
    2016-11-11
  • 解決Nginx無法啟動(dòng) -10013: An attempt was made to access a socket in a way forbidden by its access permission的問題

    解決Nginx無法啟動(dòng) -10013: An attempt was 

    這篇文章主要給大家介紹了解決用nginx -t 發(fā)成Nginx無法啟動(dòng)報(bào)錯(cuò)10013: An attempt was made to access a socket in a way forbidden by its access permissions的問題,需要的朋友可以參考下
    2023-11-11
  • 升級(jí)nginx支持HTTP/2服務(wù)端推送的方法

    升級(jí)nginx支持HTTP/2服務(wù)端推送的方法

    這篇文章主要介紹了升級(jí)nginx支持HTTP/2服務(wù)端推送的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Nginx 負(fù)載均衡是什么以及該如何配置

    Nginx 負(fù)載均衡是什么以及該如何配置

    這篇文章主要介紹了Nginx 負(fù)載均衡是什么以及該如何配置,幫助大家更好的理解和使用Nginx服務(wù)器,感興趣的朋友可以了解下
    2021-01-01
  • Nginx構(gòu)建Tomcat集群的操作方法

    Nginx構(gòu)建Tomcat集群的操作方法

    nginx是一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器;同時(shí)也是一個(gè)IMAP、POP3、SMTP代理服務(wù)器,這篇文章主要介紹了Nginx構(gòu)建Tomcat集群的問題,需要的朋友可以參考下
    2022-01-01
  • Nginx stream 配置代理(Nginx TCP/UDP 負(fù)載均衡)

    Nginx stream 配置代理(Nginx TCP/UDP 負(fù)載均衡)

    本文主要介紹了Nginx stream 配置代理(Nginx TCP/UDP 負(fù)載均衡),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • CentOS下編譯、安裝與配置nginx

    CentOS下編譯、安裝與配置nginx

    nginx可以使用各平臺(tái)的默認(rèn)包來安裝,本文是介紹使用源碼編譯安裝與配置,希望對(duì)大家熟悉nginx能夠有所幫助。
    2016-06-06
  • Nginx服務(wù)器基本的模塊配置和使用全攻略

    Nginx服務(wù)器基本的模塊配置和使用全攻略

    這篇文章主要介紹了Nginx服務(wù)器基本的模塊配置和使用全攻略,從Nginx的安裝開始細(xì)致入微地講解各個(gè)常用模塊的部署和參數(shù)使用,需要的朋友可以參考下
    2016-04-04
  • Nginx中Location配置超詳細(xì)講解

    Nginx中Location配置超詳細(xì)講解

    最近一直在做location 配置,遇到優(yōu)先級(jí)別問題(如果配置不當(dāng)可能存在安全隱患哦),下面這篇文章主要給大家介紹了關(guān)于Nginx中Location配置的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Nginx報(bào)錯(cuò)104:Connection?reset?by?peer問題的解決及分析

    Nginx報(bào)錯(cuò)104:Connection?reset?by?peer問題的解決及分析

    最近恰好又遇到這了個(gè)錯(cuò)誤,為了加深記憶,所以記錄下我遇到這個(gè)錯(cuò)誤的主要原因,下面這篇文章主要給大家介紹了關(guān)于Nginx報(bào)錯(cuò)104:Connection?reset?by?peer問題的解決及分析的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評(píng)論