前陣子因為有一個不同目錄限制不同IP可以連線的需求,所以研究了一下寫出這個小功能來,在這邊分享一下,因為沒啥空就懶得寫英文版了,希望老外看得懂。
基本上就是做到可以指定多個目錄分別對多個IP做到限制連線的功能,如何設定多目錄可以看config.js那段
寫得不複雜,也還沒加上sub mask 或是 192.168.1.* 之類的功能,等有需要再加吧
懶得打字,收工。
忘記寫了,我是參考這篇"How to Write Middleware for Connect / Express.js"的
基本上就是做到可以指定多個目錄分別對多個IP做到限制連線的功能,如何設定多目錄可以看config.js那段
寫得不複雜,也還沒加上sub mask 或是 192.168.1.* 之類的功能,等有需要再加吧
middleware\ipFilter.js
var config = require('../config'); var enabled = true; module.exports = function(onoff) { enabled = (onoff == 'on') ? true : false; var IParr = config.IPFilter; return function(req, res, next) { if(enabled && IParr.length>0){ for(var index in IParr){ var inArea = false; for(var pa in IParr[index].path){ inArea = (req.path.indexOf(IParr[index].path[pa])>-1)?true:inArea; } if(inArea) { if (IParr[index].ip.indexOf(req.connection.remoteAddress) == -1) { console.log('Banned IP from '+req.connection.remoteAddress); res.end('Banned'); } } } next(); }else{ next(); } }; };
where you setting Express.js
var express = require('express'); var ipfilter = require('./middleware/ipFilter.js'); var app = express(); app.use(ipfilter('on'));
config.js
exports.IPFilter =[ { path:['/static/admin/','home/statistic/'], ip:['127.0.0.1','192.168.1.110','123.123.123.123'] }, { path:['/job/'], ip:['1.1.1.1','127.0.0.1','192.168.11.1'] } ];
懶得打字,收工。
忘記寫了,我是參考這篇"How to Write Middleware for Connect / Express.js"的