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']
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"]
.
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:
app.set('trust proxy', true)
in your Express app.proxy_set_header X-Forwarded-For $remote_addr
in the Nginx configuration for your server block.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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With