Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 禁止来自节点服务器的客户端_Xml_Node.js_Filesystems_Ip_Blacklist - Fatal编程技术网

Xml 禁止来自节点服务器的客户端

Xml 禁止来自节点服务器的客户端,xml,node.js,filesystems,ip,blacklist,Xml,Node.js,Filesystems,Ip,Blacklist,我正在尝试在我的服务器中加入IP禁止功能。 由于我没有找到合适的模块,所以我尝试编写自己的模块 现在,我正在考虑实施以下各项的最佳方式: 能够在一定时间内禁止某个IP 现在我刚刚开始,我有: 带有 <root> <entry IP="123.123.123.123"> <time>13.09.2015</time> </entry> </root> 以及相应的检查器函数 module.exp

我正在尝试在我的服务器中加入IP禁止功能。 由于我没有找到合适的模块,所以我尝试编写自己的模块

现在,我正在考虑实施以下各项的最佳方式:

能够在一定时间内禁止某个IP

现在我刚刚开始,我有:

带有

<root>
    <entry IP="123.123.123.123">
        <time>13.09.2015</time>
    </entry>
</root>
以及相应的检查器函数

module.exports.checkBan = function(ip) {

fs.readFile(__dirname + '/ban.xml', function(err, data) {
    var banned = false;
    if (err) {
        console.log(err);
    } else {
        parser.parseString(data, function(err, result) {
            var length = result['root']['entry'].length;

            for (i=0; i<length; i++) {
                if (ip == result['root']['entry'][i]['$']['IP']) {
                    return true;
                }
            }
            return false;
        });
    }
});
};
但是,出现了以下问题:

checkBan函数没有布尔值,因为它是异步的。 这意味着,每一个!如果客户端被禁止,请求将必须等待函数返回,然后才能进行处理。 这将产生大量不必要的等待开销…我想? 如果我履行承诺,请求将得到满足,即使它们被禁止,我想。 顺便说一句:正如我注意到的那样,这些回报不起作用:

在大型网站上是如何做到这一点的? 如何做对

我想尽量减少对ip黑名单的访问时间,并尽量减少每个请求的访问开销,同时仍然能够检查ip是否被禁止。 我怎样才能做到这一点


谢谢

这确实应该在机器级或web服务器上实现。我认为最简单的一步应该是在服务器上使用iptables来阻止特定的IP访问您的机器。大型站点将使用或类似于阻止IP范围或监视恶意流量

nginx和apache都内置了模块,允许您使用web服务器中的配置来阻止流量,从而允许和拒绝某些IP地址


如果你真的下定决心要自己实现这一点,我就不会经常从文件中读取。如果IPs足够小,我会将其加载到内存中;如果它太大,无法存储内存,甚至无法存储数据库,我会将其加载到redis之类的东西中。根据您的节点web框架,如果您使用的是一个,如果它支持中间件,那么我将实现逻辑来检查IP列表,作为中间件的一部分,该中间件将在它访问任何应用程序路由之前执行

更大的站点会在Web服务器上使用类似的东西,并在它们甚至攻击您的应用程序之前过滤请求。我知道nginx可以定义一个要阻止的IP地址文件,并将其添加到配置中。如果有节点应用程序,您使用的是什么web框架?我使用的是just express。我是否能够将fail2ban与节点服务器一起使用?我想那需要进一步阅读。。最简单的方法是什么?谢谢:也许有办法,但我没有这样做的经验。如果您担心这是一个生产环境,您可能不会只运行节点本身。if应该支持某种Web服务器,比如apache或nginxwell,我计划只发布节点服务器。但你是对的,这实际上是我的第一个节点项目,所以我对整个系统相当陌生。你说我会运行一个apache来处理请求并将它们转发到我的节点?你有没有一些提示可以让我通过谷歌更好地理解整个过程?我的经验是使用nginx。谷歌nginx节点反向代理。但Apache也是如此。它被称为反向代理