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

Nginx 獲取客戶端真實IP $remote_addr與X-Forwarded-For的實現(xiàn)

 更新時間:2024年03月19日 10:20:02   作者:富士康質(zhì)檢員張全蛋  
我們大多數(shù)情況下訪問服務(wù)時,客戶端并不是直接訪問到服務(wù)器的,本文主要介紹了Nginx 獲取客戶端真實IP $remote_addr與X-Forwarded-For的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

nginx配置

首先,一個請求肯定是可以分為請求頭和請求體的,而我們客戶端的IP地址信息一般都是存儲在請求頭里的。如果你的服務(wù)器有用Nginx做負載均衡的話,你需要在你的location里面配置X-Real-IPX-Forwarded-For請求頭:

        location ^~ /your-service/ {
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://localhost:60000/your-service/;
        }

X-Real-IP

在《實戰(zhàn)nginx》中,有這么一句話:

經(jīng)過反向代理后,由于在客戶端和web服務(wù)器之間增加了中間層,因此web服務(wù)器無法直接拿到客戶端的ip,通過$remote_addr變量拿到的將是反向代理服務(wù)器的ip地址。

這句話的意思是說,當你使用了nginx反向服務(wù)器后,在web端使用request.getRemoteAddr()(本質(zhì)上就是獲取$remote_addr),取得的是nginx的地址,即$remote_addr變量中封裝的是nginx的地址,當然是沒法獲得用戶的真實ip的。但是,nginx是可以獲得用戶的真實ip的,也就是說nginx使用$remote_addr變量時獲得的是用戶的真實ip,如果我們想要在web端獲得用戶的真實ip,就必須在nginx里作一個賦值操作,即我在上面的配置:

proxy_set_header X-Real-IP $remote_addr;

$remote_addr 只能獲取到與服務(wù)器本身直連的上層請求ip,所以設(shè)置$remote_addr一般都是設(shè)置第一個代理上面;但是問題是,有時候是通過cdn訪問過來的,那么后面web服務(wù)器獲取到的,永遠都是cdn 的ip 而非真是用戶ip,那么這個時候就要用到X-Forwarded-For 了,這個變量的意思,其實就像是鏈路反追蹤,從客戶的真實ip為起點,穿過多層級的proxy ,最終到達web 服務(wù)器,都會記錄下來,所以在獲取用戶真實ip的時候,一般就可以設(shè)置成,proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 這樣就能獲取所有的代理ip 客戶ip。 

X-Forwarded-For

X-Forwarded-For變量,這是一個squid開發(fā)的,用于識別通過HTTP代理或負載平衡器原始IP一個連接到Web服務(wù)器的客戶機地址的非rfc標準,如果有做X-Forwarded-For設(shè)置的話,每次經(jīng)過proxy轉(zhuǎn)發(fā)都會有記錄,格式就是client1,proxy1,proxy2以逗號隔開各個地址,由于它是非rfc標準,所以默認是沒有的,需要強制添加。在默認情況下經(jīng)過proxy轉(zhuǎn)發(fā)的請求,在后端看來遠程地址都是proxy端的ip 。也就是說在默認情況下我們使用request.getAttribute("X-Forwarded-For")獲取不到用戶的ip,如果我們想要通過這個變量獲得用戶的ip,我們需要自己在nginx添加配置:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

意思是增加一個$proxy_add_x_forwarded_forX-Forwarded-For里去,注意是增加,而不是覆蓋,當然由于默認的X-Forwarded-For值是空的,所以我們總感覺X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,實際上當你搭建兩臺nginx在不同的ip上,并且都使用了這段配置,那你會發(fā)現(xiàn)在web服務(wù)器端通過request.getAttribute("X-Forwarded-For")獲得的將會是客戶端ip和第一臺nginx的ip。

那么$proxy_add_x_forwarded_for又是什么?

$proxy_add_x_forwarded_for變量包含客戶端請求頭中的X-Forwarded-For$remote_addr兩部分,他們之間用逗號分開。

舉個例子,有一個web應(yīng)用,在它之前通過了兩個nginx轉(zhuǎn)發(fā),www.linuxidc.com即用戶訪問該web通過兩臺nginx。

在第一臺nginx中,使用:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

現(xiàn)在的$proxy_add_x_forwarded_for變量的X-Forwarded-For部分是空的,所以只有$remote_addr,而$remote_addr的值是用戶的ip,于是賦值以后,X-Forwarded-For變量的值就是用戶的真實的ip地址了。

到了第二臺nginx,使用:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

現(xiàn)在的$proxy_add_x_forwarded_for變量,X-Forwarded-For部分包含的是用戶的真實ip,$remote_addr部分的值是上一臺nginx的ip地址,于是通過這個賦值以后現(xiàn)在的X-Forwarded-For的值就變成了“用戶的真實ip,第一臺nginx的ip”,這樣就清楚了吧。

舉個例子說明 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

192.168.179.99->192.168.179.100->192.168.179.101->192.168.179.102(102為最后的服務(wù)端)

192.168.179.99配置
      location /{
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://192.168.179.100;
     }


192.168.179.100配置
      location /{
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://192.168.179.101;
     }


192.168.179.101配置
      location /{
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://192.168.179.102;
     }


192.168.179.102配置
在日志中設(shè)置打印$http_x_forwarded_for,進行觀察
 log_format  main  '$http_x_forwarded_for|$http_x_real_ip|$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

(1)客戶端使用瀏覽器去訪問192.168.179.99服務(wù)端192.168.179.102日志如下,可以看到獲取到客戶端的IP為192.168.179.4
192.168.179.4, 192.168.179.99, 192.168.179.100|-|192.168.179.101 - - [26/Apr/2020:10:57:22 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "192.168.179.4, 192.168.179.99, 192.168.179.100"

(2)客戶端192.168.179.103去訪問192.168.179.99服務(wù)端192.168.179.102日志如下,可以看到獲取到客戶端的IP為192.168.179.103
192.168.179.103, 192.168.179.99, 192.168.179.100|-|192.168.179.101 - - [26/Apr/2020:10:57:32 +0800] "GET / HTTP/1.0" 200 4833 "-" "curl/7.29.0" "192.168.179.103, 192.168.179.99, 192.168.179.100" 

到此這篇關(guān)于Nginx 獲取客戶端真實IP $remote_addr與X-Forwarded-For的實現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx IP $remote_addr X-Forwarded-For內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx基礎(chǔ)學(xué)習(xí)之realip模塊的使用方法

    Nginx基礎(chǔ)學(xué)習(xí)之realip模塊的使用方法

    這篇文章主要給大家介紹了關(guān)于Nginx基礎(chǔ)學(xué)習(xí)之realip模塊使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • nginx配置PC站手機站分離實現(xiàn)重定向

    nginx配置PC站手機站分離實現(xiàn)重定向

    這篇文章主要介紹了nginx配置PC站手機站分離實現(xiàn)重定向,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Nginx搭建自己的CDN服務(wù)器的方法步驟

    Nginx搭建自己的CDN服務(wù)器的方法步驟

    本文主要介紹了Nginx搭建自己的CDN服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Nginx徹底解決Druid未授權(quán)訪問漏洞的方法

    Nginx徹底解決Druid未授權(quán)訪問漏洞的方法

    Apache Druid作為一個高性能的實時分析數(shù)據(jù)庫,憑借其出色的數(shù)據(jù)攝取和查詢能力,在海量數(shù)據(jù)分析領(lǐng)域占據(jù)了重要地位,然而,其自帶的監(jiān)控頁面帶來了一個嚴重的安全隱患:未授權(quán)訪問漏洞,本文給大家介紹了Nginx徹底解決Druid未授權(quán)訪問漏洞的方法,需要的朋友可以參考下
    2025-08-08
  • 通過Nginx代理轉(zhuǎn)發(fā)配置實現(xiàn)跨域的方法(API代理轉(zhuǎn)發(fā))

    通過Nginx代理轉(zhuǎn)發(fā)配置實現(xiàn)跨域的方法(API代理轉(zhuǎn)發(fā))

    這篇文章主要給大家介紹了關(guān)于如何通過Nginx代理轉(zhuǎn)發(fā)配置實現(xiàn)跨域(API代理轉(zhuǎn)發(fā))的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Nginx配置負載均衡時訪問地址無法生效的解決方法

    Nginx配置負載均衡時訪問地址無法生效的解決方法

    本文主要介紹了Nginx配置負載均衡時訪問地址無法生效的解決方法,例如負載均衡策略的設(shè)置是否正確、是否存在拼寫錯誤等,下面就來詳細的介紹一下,感興趣的可以了解一下
    2023-09-09
  • 一個等號引發(fā)的血案(談Nginx正確的404配置)

    一個等號引發(fā)的血案(談Nginx正確的404配置)

    這篇文章主要介紹了Nginx正確的404配置方法,本文根據(jù)實際案例總結(jié)而來,可以說是一個等號引發(fā)的血案!需要的朋友可以參考下
    2014-08-08
  • Nginx?處理請求并發(fā)控制的過程分享

    Nginx?處理請求并發(fā)控制的過程分享

    Nginx?作為一款高性能的?Web?服務(wù)器和反向代理服務(wù)器,在處理請求的并發(fā)控制方面有著出色的表現(xiàn),這篇文章主要介紹了Nginx?處理請求的并發(fā)控制的過程,需要的朋友可以參考下
    2024-07-07
  • Nginx 啟動、停止、重啟、升級操作命令收集

    Nginx 啟動、停止、重啟、升級操作命令收集

    也許你不知道什么是Nginx,Nginx是一個WEB服務(wù)器,如IIS那樣,現(xiàn)在好多門戶都在使用了Nginx作為WEB服務(wù)器了,Nginx在Linux系統(tǒng)下跑很優(yōu)秀,強過其它的WEB服務(wù)端,還可以做負載均衡,很不錯吧。
    2010-10-10
  • nginx 配置服務(wù)啟動的教程詳解

    nginx 配置服務(wù)啟動的教程詳解

    本文給大家詳細介紹了nginx 配置服務(wù)啟動的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05

最新評論

清丰县| 保德县| 萝北县| 淳安县| 兴化市| 格尔木市| 淳安县| 郓城县| 咸宁市| 巨野县| 宜黄县| 平乐县| 衡山县| 明溪县| 明水县| 嫩江县| 昌吉市| 宜兰县| 石柱| 元阳县| 太谷县| 德令哈市| 嘉黎县| 柳江县| 郯城县| 武夷山市| 洪泽县| 密云县| 高陵县| 新乡县| 霸州市| 和平县| 若羌县| 汉阴县| 佛山市| 陆河县| 盐山县| 盐边县| 南和县| 四会市| 平和县|