全部產品
Search
文件中心

API Gateway:IP地理位置

更新時間:May 01, 2025

geo-ip本外掛程式實現了通過使用者IP查詢出地理位置資訊,然後通過請求屬性和新添加的要求標頭把地理位置資訊傳遞給後續外掛程式。

運行屬性

外掛程式執行階段:認證階段 外掛程式執行優先順序:440

配置欄位

名稱

資料類型

填寫要求

預設值

描述

ip_protocol

string

ipv4

可選值:1. ipv4:只對ipv4使用者請求尋找地理位置資訊,傳遞給後續外掛程式。而ipv6使用者的請求會跳過該外掛程式,繼續由後續外掛程式處理。 2. ipv6:(未來實現後)只對ipv6使用者尋找地理位置資訊,傳遞給後續外掛程式。而ipv4使用者的請求會跳過該外掛程式,繼續由後續外掛程式處理。(目前是跳過外掛程式,請求由後續外掛程式處理。)

ip_source_type

string

origin-source

可選值:1. 對端socket ip:origin-source; 2. 通過header擷取:header

ip_header_name

string

x-forwarded-for

ip_source_typeheader時,指定自訂IP來源頭

配置樣本

ip_protocol: ipv4
ip_source_type: header
ip_header_name: X-Real-Ip

產生geoCidr.txt的說明

在generateCidr目錄裡包含的ip.merge.txt檔案是gitHub上ip2region專案的全世界的IP網段庫。 ipRange2Cidr.go 是把IP網段轉換成多個CIDR的程式。轉換出的CIDR和地理位置資訊存在 /data/geoCidr.txt檔案裡。geo-ip外掛程式會在Higress啟動讀設定階段讀取geoCidr.txt檔案並且解析到radixtree資料結構的記憶體裡,以便以後查詢使用者IP對應的地理位置資訊。轉換程式運行命令如下:

go run generateCidr/ipRange2Cidr.go

property 的使用方式

在geo-ip外掛程式裡調用proxywasm.SetProperty(),分別把country、city、province、isp設定進請求屬性裡,以便後續外掛程式可以調用proxywasm.GetProperty()擷取該請求的使用者IP對應的地理資訊。

基於geo-ip外掛程式的能力,擴充AI提示詞裝飾器外掛程式攜帶使用者地理位置資訊

如果需要在LLM的請求前後加入使用者地理位置資訊,請確保同時開啟geo-ip外掛程式和AI提示詞裝飾器外掛程式。並且在相同的請求處理階段裡,geo-ip外掛程式的優先順序必須高於AI提示詞裝飾器外掛程式。首先geo-ip外掛程式會根據使用者IP計算出使用者的地理位置資訊,然後通過請求屬性傳遞給後續外掛程式。比如在預設階段裡,geo-ip外掛程式的priority配置1000,ai-prompt-decorator外掛程式的priority配置500。

geo-ip外掛程式配置樣本:

ipProtocal: "ipv4"

AI提示詞外掛程式的配置樣本如下:

prepend:
- role: system
  content: "提問使用者當前的地理位置資訊是,國家:${geo-country},省份:${geo-province}, 城市:${geo-city}"
append:
- role: user
  content: "每次回答完問題,嘗試進行反問"

使用以上配置發起請求:

curl http://localhost/test \
-H "content-type: application/json" \
-H "x-forwarded-for: 87.254.207.100,4.5.6.7" \
-d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "user",
      "content": "今天天氣怎麼樣?"
    }
  ]
}'

經過外掛程式處理後,實際請求為:

curl http://localhost/test \
-H "content-type: application/json" \
-H "x-forwarded-for: 87.254.207.100,4.5.6.7" \
-d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "提問使用者當前的地理位置資訊是,國家:中國,省份:北京, 城市:北京"
    },
    {
      "role": "user",
      "content": "今天天氣怎麼樣?"
    },
    {
      "role": "user",
      "content": "每次回答完問題,嘗試進行反問"
    }
  ]
}'