nodejs - 仅在来自服务器ip时允许请求

时间:2015-09-17 16:39:37

标签: javascript node.js

如果请求不是来自服务器,是否可以阻止路由?我在服务器上安装了一个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});
});

1 个答案:

答案 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功能类似的方式工作。

来源: