获取节点的请求hapijs中的客户端IP地址

时间:2017-05-19 08:09:53

标签: javascript node.js hapijs

我需要在hapijs节点的请求中使用我的应用程序获取客户端的IP地址...我们使用pm2和Nginx服务器运行实时我们使用了request.info.address但是它给了服务器本地IP为127.0.0.1,但我需要的是使用我的应用程序的客户端IP,例如:192.xx111 ...

4 个答案:

答案 0 :(得分:1)

我总是使用此功能获取客户端IP地址:)

    return request.headers['x-forwarded-for'] ||
    request.connection.remoteAddress ||
    request.socket.remoteAddress ||
    request.connection.socket.remoteAddress;

希望它有所帮助。

答案 1 :(得分:1)

如果您在Nginx代理服务器后面运行服务器,则必须使用

def loga(x):
    cond = [x >= 0, x < 0]
    choice = [np.log(x+1), -np.log(-x+1)]
    return np.select(cond, choice)

def logb(x):
    return np.where(x>=0, np.log(x+1), -np.log(-x+1))

In [16]: %timeit loga(arange(-1000,1000))
10000 loops, best of 3: 169 µs per loop

In [17]: %timeit logb(arange(-1000,1000))
10000 loops, best of 3: 98.3 µs per loop

In [18]: np.all(loga(arange(-1000,1000)) == logb(arange(-1000,1000)))
Out[18]: True

否则你可以使用

    req.headers['x-real-ip']

答案 2 :(得分:1)

我使用nginx和PM2为我的hapi应用程序运行相同的堆栈。通过nginx将请求代理到同一主机上的节点应用程序将始终为127.0.0.1生成远程地址,因为nginx会在同一主机上转发请求。

解决方案那里有一个专用插件hapi-geo-locate,即使您在反向代理(例如nginx)后面运行您的应用,也会确定实际的客户端IP地址。

hapi-geo-locate支持各种代理和HTTP标头,因此您应该保存并让用户的IP在不同平台上运行您的应用。

希望有所帮助!

答案 3 :(得分:1)

您应该检查反向代理(nginx)上的配置,看看您是否正在发送IP以及您是如何进行的。

例如(nginx conf):

server {
    listen       0.0.0.0:80;
    server_name  [your_domain];
    root /webroot/[your_domain or webapp name];
    access_log  /var/log/nginx/[your_domain or webapp name].log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:[port assigned to node];
        proxy_redirect off;
    }
}

在这种情况下,您将通过标题X-Real-IP获取客户端的IP。

所以在HapiJS中,您可以访问request对象:

const ip = request.headers['x-real-ip'] || request.info.remoteAddress;