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