Node.js Ошибка EACCES при прослушивании на порту http 80 (разрешение отклонено)

Node.js вызывает следующую ошибку при запуске на http-порту 80 (порт по умолчанию): -

Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)

Я понял, что node должен иметь root-доступ.

Обычно мы избегаем предоставления корневого доступа в нормальной ситуации. Каковы наилучшие методы его использования на порту 80 (или порт < 1024).

Эта ссылка имеет тот же вопрос, но имеет только один ответ, т.е. PREROUTING. Хотя мое решение также предоставляет другие способы.

Я пишу это, чтобы иметь все ответы в одном месте, так как мне нужно пройти другие ресурсы, кроме PREROUTING. Почему не все ответы в одном месте для обмена знаниями

Ответ 1

FYI: вы не можете запускать сокет на портах < 1024 с обычным разрешением пользователя. Для этого вам нужен root-доступ.

Всего существует 3 способа решения проблемы: -


1. Дайте root доступ и запустите его (что обычно)

2. Перенаправление на другой порт

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

Затем запустите мой Node.js на порт 3000. Запросы на порт 80 будут отображаться на порт 3000.

Вы также должны отредактировать файл /etc/rc.local и добавить эту строку минус sudo. Это добавит перенаправление при загрузке машины. Вам не нужно sudo в /etc/rc.local, потому что команды там выполняются с правами root при загрузке системы.

Ссылка Ссылка

3. Дайте нормальным пользователям возможность использования сокетов с правами root

Цель: - Мы не предоставляем полный доступ с правами root и предоставляем разрешение socket_root для доступа к нему обычного пользователя для запуска вашего сервера на любом порту.

мы НЕ хотим запускать ваши приложения в качестве пользователя root, но есть заминка: у вашего безопасного пользователя нет разрешения использовать HTTP-порт по умолчанию (80). Целью является публикация веб-сайта, который посетители могут использовать, перейдя на простой в использовании URL-адрес, например http://localhost.

К сожалению, если вы не входите в систему под учетной записью root, вам обычно нужно использовать URL-адрес, например http://localhost:3000 - указать номер порта.

Многие люди застревают здесь, но решение легко. Там несколько вариантов, но это тот, который мне нравится. Введите следующие команды:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

Теперь, когда вы сообщаете приложение Node, которое вы хотите запустить на порт 80, оно не будет жаловаться.

Ссылка Ссылка

Общая информация Ссылка ссылка от apache