如果请求不是来自服务器,是否可以阻止路由?我在服务器上安装了一个http客户端,它向一个我不想公开的Web服务发出get请求。问题是http客户端没有登录应用程序,服务器将其视为匿名用户。
这是我到目前为止所尝试的内容,但我不知道在req中我应该查找requerer的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});
});
答案 0 :(得分:2)
根据您的语法,我假设您使用的是Express。 在这种情况下,获取客户端IP的简单方法是:
defineGetter(req, 'ip', function ip(){
var trust = this.app.get('trust proxy fn');
return proxyaddr(this, trust);
});
你可以看到它使用的逻辑,当从x-forwarded-for标头构造该数组时,从代理地址req.ips数组中获取第一项:
var ip = req.headers['x-forwarded-for']
|| req.connection.remoteAddress
|| req.socket.remoteAddress
|| req.connection.socket.remoteAddress;
如果您不使用快递,请尝试使用:
{{1}}
这应该关注大多数配置,并以与上述Express功能类似的方式工作。
来源: