[英]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 上檢查了這三個的使用情況
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.