5

考虑以下 expressjs 应用程序:

var express = require('express');
var http    = require('http');
var httpApp = express();

httpApp.configure(function() {
    httpApp.use(express.static(__dirname + '/static/'));
});

var server = http.createServer(httpApp).listen(4444);

现在,我希望这台服务器不能公开使用,并且只能根据特定客户端的 IP 地址/域响应来自特定客户端的请求。其他人都应该得到403 - Forbidden错误。

我搜索了 API Doc 并找到了这样做的方法,首先通过app.enable('trust proxy')& 然后检查启用信任代理req.ip

但是,我不能访问req对象。因此,如果有人使用此代码并可以向我展示如何根据其 IP/域拒绝请求,那将非常有帮助

4

2 回答 2

9

只需添加一个中间件来检查 IP 并在不匹配时拒绝访问:

app.use(function(req, res, next) {
  if (allowed(req.ip))
    next();
  else
    res.status(403).end('forbidden');
});
于 2013-07-06T09:43:48.573 回答
1

使用 express-ipfilter

安装

npm install express-ipfilter

与快递一起使用

var express = require('express')
    , ipfilter = require('express-ipfilter')
    , app = express.createServer()
    ;

// Whitelist the following IPs 
var ips = ['127.0.0.1'];

// Create the server 
app.use(ipfilter(ips, {mode: 'allow'}));
app.listen(3000);

https://www.npmjs.com/package/express-ipfilter#installation

于 2016-06-23T08:48:48.080 回答