首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Express.js:如何获取远程客户端地址

Express.js:如何获取远程客户端地址
EN

Stack Overflow用户
提问于 2012-06-01 19:49:01
回答 10查看 365.3K关注 0票数 334

我不完全理解如何获取远程用户的IP地址。

假设我有一个简单的请求路由,如下所示:

代码语言:javascript
复制
app.get(/, function (req, res){
   var forwardedIpsStr = req.header('x-forwarded-for');
   var IP = '';

   if (forwardedIpsStr) {
      IP = forwardedIps = forwardedIpsStr.split(',')[0];  
   }
});

上面的方法是正确的,还是有更好的方法来获取真实的用户IP地址?那么代理又如何呢?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-06-01 19:53:33

如果您运行在诸如NGiNX之类的代理或其他代理之后,那么只有这样才应该检查'x-forwarded-for'

代码语言:javascript
复制
var ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress 

如果代理不是“您的”,我不会信任'x-forwarded-for'头,因为它可能被欺骗。

票数 603
EN

Stack Overflow用户

发布于 2019-05-10 06:42:15

这只是this answer的附加信息。

如果您使用的是nginx,您可以将proxy_set_header X-Real-IP $remote_addr;添加到站点的位置块中。例如,/etc/nginx/sites-available/www.example.com。这是一个服务器块示例。

代码语言:javascript
复制
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://127.0.1.1:3080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

重新启动nginx后,您将能够使用req.headers['x-real-ip'] || req.connection.remoteAddress;访问node/express应用程序路由中的ip

票数 10
EN

Stack Overflow用户

发布于 2018-11-21 19:00:41

我为此写了一个包。您可以将其用作express中间件。我的包发布在这里:https://www.npmjs.com/package/express-ip

您可以使用以下命令安装该模块

代码语言:javascript
复制
npm i express-ip

用法

代码语言:javascript
复制
const express = require('express');
const app = express();
const expressip = require('express-ip');
app.use(expressip().getIpInfoMiddleware);

app.get('/', function (req, res) {
    console.log(req.ipInfo);
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10849687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档