Удаленный IP-адрес с node -js за Amazon ELB
У меня есть приложение node на амазонной машине экземпляра-хранилища за балансиром эластичной нагрузки (elb). Однако удаленный IP-адрес, похоже, всегда будет таким же. Я использовал этот код для получения IP-адреса клиента в node (через connect/express):
req.socket.remoteAddress
Я ничего не получил от документации node. Любой намек?
Ответы
Ответ 1
Здесь решение , если вы используете экспресс:
Согласно документации, вы можете включить trust proxy
для вашего экспресс-экземпляра, а затем req.ip
будет заполнен правильным IP-адресом.
Включив настройку "доверенный прокси" с помощью app.enable( "доверенный прокси" ) Экспресс будет знать, что он сидит за доверенным лицом и что поля заголовка X-Forwarded- * могут быть доверенными, что в противном случае может быть легко подделать.
Включение этого параметра имеет несколько тонких эффектов. Первый из которых что X-Forwarded-Proto может быть установлен обратным прокси-сервером, чтобы сообщить что это https или просто http. Это значение отражается req.protocol.
Второе изменение - это значения req.ip и req.ips. заполненный списком адресов X-Forwarded-For.
Вот пример:
var app = express();
app.enable('trust proxy');
// ...
app.use(function(req, res, next) {
console.log('client ip address:', req.ip);
return next();
});
Ответ 2
Ответ работал у меня, спасибо. Но вы можете просто попробовать:
var ip_address = null;
if(req.headers['x-forwarded-for']){
ip_address = req.headers['x-forwarded-for'];
}
else {
ip_address = req.connection.remoteAddress;
}
sys.puts( ip_address );
Ответ 3
Получив IP-адрес экземпляра ELB, вам нужно получить значение x-forwarded-from из заголовков. Поскольку я не гуру node.js, я нашел этот код на http://forum.webfaction.com/viewtopic.php?id=4500
Пример:
var http = require( 'http' ),
sys = require( 'sys' );
http.createServer(
function( req, res ) {
var ip_address = null;
try {
ip_address = req.headers['x-forwarded-for'];
}
catch ( error ) {
ip_address = req.connection.remoteAddress;
}
sys.puts( ip_address );
}
);