Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get ip user with nginx and node

Tags:

node.js

nginx

I have a problem with nginx and node, because when i want get the ip of user with node, in my localhost works ok(no use nginx) but in my server dont work as it should. I was researching and see that the node no is the first that receive the ip, is nginx and after nginx send the request to node. then the ip that node receive is the my server and not user's ip. look the the configuration server nignx:

location / {
        proxy_pass https://fotogena.co:8000;  <-nginx send req to node
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_connect_timeout   1000;
        proxy_send_timeout      1500;
        proxy_read_timeout      2000;
}

i use "req.connection.remoteAddress" for know the ip of user and the console show me the ip of my server. somebody know how solve this problem?

thanks :D

-----------2016-04-20--------

i can solved the problem, with this line on nginx file setting

proxy_set_header X-Real-IP $remote_addr;

and node.js

req.headers['x-forwarded-for']
like image 875
SonickSeven Avatar asked Jun 19 '15 16:06

SonickSeven


2 Answers

You can configure NGINX to pass the client's IP address with the following setting:

location / {
        proxy_pass https://fotogena.co:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;  # This line.
        proxy_connect_timeout   1000;
        proxy_send_timeout      1500;
        proxy_read_timeout      2000;
}

You can then use the HTTP header X-Real-IP from req.headers["x-real-ip"].

like image 80
Piper McCorkle Avatar answered Oct 04 '22 00:10

Piper McCorkle


proxy_set_header X-Real-IP $remote_addr; Did not worked for me

When running an Express app behind a proxy, you have to set the application variable trust proxy to true. Express offers a few other trust proxy values which you can review in their documentation, but for now, we don’t have to mind them.

Without further ado, these are the steps to reveal a visitor’s IP address to your app:

  1. app.set('trust proxy', true) in your Express app.
  2. Add proxy_set_header X-Forwarded-For $remote_addr in the Nginx configuration for your server block.
  3. You can now read off the client’s IP address from the req.header('x-forwarded-for') or req.connection.remoteAddress;

like below in Nginx config

location /  {
            proxy_pass    http://localhost:3001;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;  # this line
            proxy_cache_bypass $http_upgrade; 
    }
like image 44
ANIK ISLAM SHOJIB Avatar answered Oct 03 '22 22:10

ANIK ISLAM SHOJIB