Joh*_*sen 10 ip amazon node.js
我在弹性负载平衡器(elb)后面的实例存储亚马逊机器上有一个节点应用程序.但是,远程IP地址似乎始终是相同的.我使用此代码在节点中获取客户端的IP地址(通过connect/express):
req.socket.remoteAddress
Run Code Online (Sandbox Code Playgroud)
我没有从节点文档中获得任何其他内容.任何提示?
这是一个解决方案,以防您使用express:
根据文档,您可以启用trust proxy您的快速实例,然后req.ip将填充正确的IP地址.
通过app.enable('trust proxy')启用"信任代理"设置,Express将知道它位于代理后面并且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();
});
Run Code Online (Sandbox Code Playgroud)
答案对我有用,谢谢.但你可以尝试:
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 );
Run Code Online (Sandbox Code Playgroud)
您收到ELB实例的IP,您需要从标头中获取x-forwarded-for值.由于我不是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 );
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7260 次 |
| 最近记录: |