Ограничить доступ к HTTP-серверу Node.js по IP-адресу

Как я могу ограничить доступ по IP-адресу в приложении HTTP-сервера Node.js?

Я ищу что-то вроде этого:

Deny from all
Allow from ..

Мне нужно разрешить доступ к сайту только для нескольких IP-адресов. Как я могу это сделать?

Ответы

Ответ 1

Я не уверен, насколько пуленепробиваемый этот подход, но вот он, собранный из ответов в Интернете:

var http = require('http');
http.createServer(function (req, res)
{
    var ip = req.ip || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;
    if (ip == '127.0.0.1') // exit if it a particular ip
        res.end();
...

Пожалуйста, кто-то более опытный в node - исправьте меня

Ответ 2

Если вы ограничиваете доступ к целым сервером по сетевому адресу, лучше поместить эти правила в свой брандмауэр. Если вы хотите обработать его на прикладном уровне по какой-либо причине (простота настройки, динамическая авторизация и т.д.), Тогда лучше всего сделать это сразу после подключения, а не ждать HTTP-запроса.

Node.js 'http.Server испускает событие connection, которое вы можете использовать для определения удаленного адреса и уничтожения соединения до (или во время) фактический запрос HTTP. Этот код не проверен, но вам нужно начать:

var server = http.createServer(function (req, res) {
  // Your normal request handling goes here
});

server.on('connection', function (sock) {
  console.log(sock.remoteAddress);
  // Put your logic for what to do next based on that remote address here
});

server.listen(80);