Ограничить доступ к 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);