簡體   English   中英

返回站點訪問者的 ip 地址,而不是 Heroku 服務器

[英]Return ip address of site visitors instead of Heroku server

因此,我試圖在 Heroku 上獲取我的應用程序訪問者的 IP 地址,為此我使用 API,API 在本地運行良好,但是當我在 Heroku 上部署該應用程序時,我得到 88185186119688 的 88185186119688 是 898 服務器的 88185186119628 is6628 express.js 應用程序並正在使用此設置

app.set('trust proxy', true);

我已經看到很多解決這個問題的方法,但沒有一個對我有用。

當我使用

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

我得到這個結果

clientIp: '::1',

首先你必須安裝這個模塊npm i ipware

var get_ip = require('ipware')().get_ip;


app.use(function(req, res, next) {
    var ip_info = get_ip(req);
    console.log(ip_info);
    // { clientIp: '127.0.0.1', clientIpRoutable: false }
    next();
});

請注意,結果是 object 形式,獲取 ipaddress 應該很簡單

ip_info.clientIp

所以我想這應該會有所幫助。

var ip = req.headers['x-forwarded-for'] || 
     req.connection.remoteAddress || 
     req.socket.remoteAddress ||
     (req.connection.socket ? req.connection.socket.remoteAddress : null);

但有時你可以通過這個req.headers['x-forwarded-for']獲得多個 IP 地址

      var ipAddr = req.headers["x-forwarded-for"];
      if (ipAddr){
        var list = ipAddr.split(",");
        ipAddr = list[list.length-1];
      } else {
        ipAddr = req.connection.remoteAddress;
      }

你用基本的 if else 來控制。

或者您可以使用這個並在答案頂部替換為 req.headers['x-forwarded-for']

let ip = request.headers['x-forwarded-for'].split(',')[0]

我假設 Op 正在使用這個 API - http://geo.ipify.org/api/v2/country

API 實際上在本地和生產環境(在 Heroku 上)都運行良好。 顯示 Heroku 服務器的 IP 地址而不是訪問者的 IP 地址的真正問題或原因是您現在正在從 Heroku 服務器調用 API,如@SuperStormer 所述。

正如 Op 指出的那樣,在 express.js 中有多種獲取用戶 Ip 地址的方法。

我在本地和 Heroku 上檢查了這三個的使用情況

  • 申請ip
  • req.headers.["x-forwarded-for"]
  • req.connection.remoteAddress

這是它在 Heroku 日志中的樣子IP地址的heroku日志

PS:信任代理已設置為 true,這就是為什么req.ip具有與req.headers.["x-forwarded-for"]相同的值。

req.connection.remoteAddress 返回的req.connection.remoteAddress地址是以 IPv6 表示法表示的 IPv4 地址,由於它與之前的值不一致,因此證明客戶端和服務器之間存在代理。

當您在本地主機上時:通常從訪問請求 object 返回的 IP 地址是::1

::1實際上是一個 IP 地址,是本地主機的 IPV6 表示法。 IPv4 中的環回地址是 127.0.01。 在 IPv6 中,環回地址是 0:0:0:0:0:0:0:1 或 ::1。

您可以閱讀此操作指南,了解有關獲取 IP 地址的不同方法的更多信息。

暫無
暫無

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

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