简体   繁体   中英

get client ip address in request hapijs for node

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

In case if you are running the server behind a Nginx proxy server you would have to use

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

else you can use

req.info.remoteAddress

I always get client IP address with this function :)

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

Hope it helps.

I'm running the same stack for my hapi apps with nginx and PM2. Proxying requests through nginx to a node app on the same host will always result in 127.0.0.1 for the remote address, because nginx forwards the request on the same host.

Solution: there's a dedicated plugin hapi-geo-locate that determines the actual client IP address even though you're running your app behind a reverse proxy (like nginx).

hapi-geo-locate supports various proxies and HTTP headers, so you should be save and get the user's IP running your app on different platforms.

Hope that helps!

You should check the configuration on the reverse proxy (nginx) and see if you are sending the ip and how you're doing it.

For example (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;
    }
}

In this case, you will get the client's IP via the header X-Real-IP .

So in HapiJS, where you have access to the request object:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM