如果请求不是来自服务器,是否可以阻止路由?我在服务器上安装了一个 http 客户端,它向我不想公开的 Web 服务发出获取请求。问题是 http 客户端没有登录到应用程序中,服务器将其视为匿名用户。
到目前为止,这是我尝试过的方法,但我不知道我应该在请求中的哪个位置查找请求者的 ip,或者它是否是实现我想做的事情的正确方法:
function isFromServer (req, res, next) {
if(req.ip === '127.0.0.1') return next();
else {
var err = new Error('Not Found');
err.status = 404;
return next(err);
}
}
//the webservice I want to allow only to the http client installed on the server
router.get('/[0-9]{3}$', isFromServer, function(req, res, next){
var codecs = req.url.split('/')[1];
res.render('metadata', {codecs: codecs});
});
最佳答案
根据您的语法,我假设您使用的是 Express。 在这种情况下,获取客户端 IP 的直接方法是:
req.ip // → "127.0.0.1"
您可以看到它使用的逻辑,当该数组是从 x-forwarded-for header 构造时,从代理地址数组 req.ips 中获取第一项:
defineGetter(req, 'ip', function ip(){
var trust = this.app.get('trust proxy fn');
return proxyaddr(this, trust);
});
如果您不使用 express,请尝试使用:
var ip = req.headers['x-forwarded-for']
|| req.connection.remoteAddress
|| req.socket.remoteAddress
|| req.connection.socket.remoteAddress;
这应该会处理大多数配置,并以与上述 Express 函数类似的方式工作。
来源:
关于javascript - nodejs - 仅当来自服务器 ip 时才允许请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635616/