日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

應用獲取客戶端真實IP

來源: 責編: 時間:2023-11-15 17:17:01 272觀看
導讀背景信息因為產品需要,要在應用端獲取到真實的客戶端IP,訪問鏈路如下:由于應用前面經過了多次代理,所以默認情況下是獲取不到真實IP的。基本概念在實現之前,先簡單了解一下常用來獲取IP的幾個header。remote_addrX-Forward

Cze28資訊網——每日最新資訊28at.com

背景信息

因為產品需要,要在應用端獲取到真實的客戶端IP,訪問鏈路如下:Cze28資訊網——每日最新資訊28at.com

Cze28資訊網——每日最新資訊28at.com

由于應用前面經過了多次代理,所以默認情況下是獲取不到真實IP的。Cze28資訊網——每日最新資訊28at.com

基本概念

在實現之前,先簡單了解一下常用來獲取IP的幾個header。Cze28資訊網——每日最新資訊28at.com

  • remote_addr
  • X-Forwarded-For
  • X-Real-IP

1、remote_addr

remote_addr代表客戶端IP,但是它的值不是由客戶端提供的,而是服務端根據客戶端IP指定的。當你訪問某個應用時,當中間沒有經過任何代理,那么應用獲取到的remote_addr就是你的主機IP。如果中間經過了代理轉發,正常情況下,應用獲取到的remote_addr就是代理的IP,除非在代理服務器上手動將remote_addr的地址設置成你的主機IP。Cze28資訊網——每日最新資訊28at.com

2、X-Forwarded-For

X-Forwarded-For是HTTP擴展頭,簡稱XFF。Cze28資訊網——每日最新資訊28at.com

XFF 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的設備 IP,然后是每一級代理設備的 IP,其格式為:X-Forwarded-For: client,proxy1,proxy2。Cze28資訊網——每日最新資訊28at.com

!! PS: X-Forwarded-For的格式可以被偽造。Cze28資訊網——每日最新資訊28at.com

如果一個應用的前面有三個代理,分別是 Proxy1、Proxy2、Proxy3,它們的IP地址分別是IP1、IP2、IP3,用戶的真實IP為IP0,那么按照XFF標準,應用收到的XFF信息應該如下:X-Forwarded-For: IP0,IP1,IP2。這里沒有IP3,是因為Proxy3是轉發Proxy2的代理,在轉發過程中會將Proxy2的IP地址追加到XFF中,而自己的IP地址會被放入remote_addr中。Cze28資訊網——每日最新資訊28at.com

Cze28資訊網——每日最新資訊28at.com

!! PS:通過一個代理才會把上一個節點的IP加到XFF中。Cze28資訊網——每日最新資訊28at.com

3、X-Real-IP

X-Real-IP是一個自定義的頭部字段,通常被HTTP代理用來表示與它產生TCP連接的設備IP,和XFF不一樣的是,它不是列表,無法將記錄追加到X-Real-IP的結尾,而是直接替換。Cze28資訊網——每日最新資訊28at.com

理想情況下,我們需要達到以下效果:Cze28資訊網——每日最新資訊28at.com

Cze28資訊網——每日最新資訊28at.com

也就是應用獲取到的X-Real-IP就是客戶端的真實IP,這就要求除了第一層代理之外,后面的代理不需要再去設置X-Real-IP,只需要做轉發即可,這樣應用就能拿到真實的客戶端訪問IP了。Cze28資訊網——每日最新資訊28at.com

具體實現

由于現實情況,我們在Haproxy上會做很多的規則配置,所以第一層SLB上是單純的TCP代理,因此在SLB上不需要做太多額外配置,客戶端IP會直接透傳過去。Cze28資訊網——每日最新資訊28at.com

當請求到達Haproxy之后,需要將客戶端IP加到XFF中,并且設置X-Real-IP為客戶端IP,具體配置如下:Cze28資訊網——每日最新資訊28at.com

defaults                mode                    http                log                     global                option                  httplog                option                  dontlognull                option http-server-close                log 127.0.0.1 local3                option forwardfor       except 127.0.0.0/8                option                  redispatch                retries                 3                timeout http-request    10s                timeout queue           1m                timeout connect         10s                timeout client          5m                timeout server          5m                timeout http-keep-alive 10s                timeout check           10s                unique-id-format %{+X}o/ %ci%cp%fi%fp%Ts%rt%pidfrontend https_link_ha        bind *:443 ssl crt /usr/local/etc/haproxy/cert/crt/ ca-file /usr/local/etc/haproxy/cert/ca/ca.pem verify optional        #log 127.0.0.1 local3        mode http        log-format "%ID %ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"        option accept-invalid-http-request        http-request set-header x-request-id %[unique-id]        http-request set-header x-request-time %[date()]        http-request set-header X-Real-IP %[src]        default_backend prebackend pre     server 1 10.74.136.13:8080 check inter 1500 rise 3 fall 3 weight 3

其中主要是兩個配置:Cze28資訊網——每日最新資訊28at.com

  • option forwardfor       except 127.0.0.0/8在由Haproxy發往后端的請求中加上XFF首部,其值是前個客戶端的IP。
  • http-request set-header X-Real-IP %[src]在X-Real-IP中設置客戶端IP。

現在請求就到達Ingress了。Cze28資訊網——每日最新資訊28at.com

Ingress也是一層代理,前面的客戶端IP已經放到XFF中,但是默認情況下,Ingress沒有開啟XFF。Cze28資訊網——每日最新資訊28at.com

在Ingress上要使用XFF,需要使用到以下三個參數:Cze28資訊網——每日最新資訊28at.com

  • use-forwarded-headers:是否開啟XFF頭傳遞,默認是false。
  • forwarded-for-header:XFF的真實header名,默認是X-Forwarded-For。
  • compute-full-forwarded-for:列出客戶端訪問所經過的代理IP,默認情況下,XFF是從remote_addr中獲取的值。

所以,我們只需要在Nginx Ingress的ConfigMap里增加以下兩個配置即可:Cze28資訊網——每日最新資訊28at.com

use-forwarded-headers: 'true'compute-full-forwarded-for: 'true'

配置完成后,Nginx Ingress會自動重載服務,不需要單獨重啟。Cze28資訊網——每日最新資訊28at.com

然后在應用的日志里就能獲取到客戶端的真實IP了。Cze28資訊網——每日最新資訊28at.com

Cze28資訊網——每日最新資訊28at.com

當然,并不是所有的場景都能通過XFF獲取到用戶的真實IP,比如當SLB前面還有CDN的情況下,獲取的可能就是CDN的來源IP了。Cze28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-25980-0.html應用獲取客戶端真實IP

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Qt串口回路信號讀取多線程14串口測試方案

下一篇: 使用 Python 的基于邊緣和基于區域的分割

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾“低價”口號。而過去與他們錯位競爭的拼多多,靠
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • iQOO Neo8 Pro搶先上架:首發天璣9200+ 安卓性能之王

    經過了一段時間的密集爆料,昨日iQOO官方如期對外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級性能調校的作品。隨著發布時
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
  • onebot M24巧系列一體機采用輕薄機身設計,現已在各平臺開售

    onebot M24 巧系列一體機目前已在線上線下各平臺同步開售。onebot M24 巧系列采用一體化輕薄機身設計,最薄處為 10.15mm,擁有寶石紅、午夜藍、石墨綠、雅致
Top 主站蜘蛛池模板: 龙海市| 兰坪| 理塘县| 平利县| 彭泽县| 菏泽市| 句容市| 宁国市| 福鼎市| 塘沽区| 徐汇区| 华容县| 扶绥县| 米脂县| 靖宇县| 江孜县| 沂源县| 嵊州市| 万安县| 兴义市| 哈尔滨市| 九江市| 靖宇县| 巴彦淖尔市| 岳阳县| 宾阳县| 共和县| 泽州县| 海林市| 达尔| 敦煌市| 萨迦县| 乾安县| 甘谷县| 天长市| 舟山市| 甘泉县| 黄石市| 广德县| 都兰县| 祁东县|