簡體   English   中英

帶有 IP 地址的 Next.js api 路由

[英]Next.js api route with IP address

在我的 next.js api 路由之一中,

例如: pages/api/example.js

我有以下簡單的代碼。 然后,在這條路線中,我向服務器發布了請求。

export default async function example(req, res) {
   
  const data = await axios.post(
     https://another_server_Url, // another server api
    {
      data
    })

  res.status(200).json({ name: 'John Doe' })
}

我的問題是another_server api 是否實現了分級限制機制,我可以先獲取用戶 IP 地址,然后通過 axios 請求以某種方式傳遞 IP 地址。 所以another_server api 可以識別真實的ip。

據我了解當前代碼,next.js 服務器以某種方式成為代理。

現在的問題是,因為我在下一個路由器 api 中調用了 Api,所以 IP 地址將始終是我的next.js服務器。

您可以從req.headers['x-forwarded-for']獲取客戶端的 IP - 看看:如何在 node 中確定用戶的 IP 地址 然后,將此 IP 在 axios POST 請求正文中傳遞給another_server

編輯:

為了回應您在下面的評論,實現在很大程度上取決於后端服務器 ( another_server ) 的配置以及它如何讀取客戶端 IP。 例如,檢查它是否使用請求標頭來確定 IP - 如果是,請識別特定標頭並在 axios 調用中覆蓋它以包含原始客戶端 IP,例如:

  const clientIp = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() || 
    req.socket.remoteAddress;

  const data = await axios({
    method: 'post',
    url: 'https://google.com',
    headers: {
      'x-forwarded-for': clientIp
    },
    // ...
  });

另一種解決方案是簡單地將請求從客戶端直接發送到another_server並完全跳過該問題,但我認為在您的情況下這不是一個可行的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM