Как правило, процессы, выполняющиеся без привилегий root, не могут связываться с портами ниже 1024.
Так что попробуйте более высокий порт или запустите с повышенными привилегиями с помощью sudo
. Вы можете понизить привилегии после того, как вы привязались к нижнему порту, используя process.setgid
и process.setuid
.
При запуске ваших приложений на heroku вы должны использовать порт, как указано в переменной окружения PORT.
См. http://devcenter.heroku.com/articles/node-js
var server = require('http').createServer();
var port = process.env.PORT || 3000;
server.listen(port, function() {
console.log('Listening on ' + port);
});
Это означает, что узел не может прослушивать определенный порт. Измените его на 1234 или 2000 или 3000 и перезапустите сервер.
OMG !! В моем случае я делал ....listen(ip, port)
вместо ...listen(port, ip)
, и это вызывало ошибку msg: Error: listen EACCES localhost
Я использовал номера портов> = 3000 и даже пытался с доступом администратора. Ничего не получилось. Затем, с более близким переосмыслением, я заметил проблему. Изменил его на ...listen(port, ip)
, и все начало работать нормально !!
Просто назовите это в случае, если это полезно кому-то другому ...
Попробуйте authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
После установки , вы можете добавить файл с именем номера порта, который вы хотите использовать, в следующей папке: / etc / authbind / byport /
Дайте ему 500 разрешений с помощью chmod и измените право собственности на пользователя, которого вы хотите запустить программу под.
После этого выполните «authbind node ...» в качестве этого пользователя в вашем проекте.
Другой подход заключается в перенаправлении портов:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 900 -j REDIRECT --to-port 3000
И запустите ваш сервер на> 1024 портах:
require('http').createServer().listen(3000);
ps то же самое можно сделать для https (443 ) порт между прочим.
это происходит, если порт, который вы пытаетесь локально размещать, является portfowarded
Я получил эту ошибку на своем mac, потому что он запускал сервер Apache по умолчанию, используя тот же порт, что и тот, который используется сервером узлов, который в моем случае был портом 80. Все, что мне нужно было сделать, это остановить его с помощью sudo apachectl stop
Надеюсь, это кому-то поможет.
Помните, если вы используете sudo для привязки к порту 80 и используете переменные env PORT & amp; NODE_ENV вы должны повторно экспортировать эти вары, поскольку теперь вы находитесь под корневым профилем, а не с вашим профилем пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:
sudo su
export NODE_ENV=production
export PORT=80
docpad run
Предоставьте безопасное разрешение пользователя для использования порта 80
Помните, что мы НЕ хотим запускать ваши приложения как пользователь root, но есть заминка: у вашего безопасного пользователя нет разрешения использовать HTTP-порт по умолчанию (80). Вы хотите опубликовать веб-сайт, который посетители могут использовать, перейдя на простой в использовании URL-адрес, например
http://ip:port/
. К сожалению, если вы не входите в систему под root, вам обычно придется использовать URL как
http://ip:port
- номер порта> 1024.Многие люди застревают здесь, но решение легко. Там несколько вариантов, но это тот, который мне нравится. Введите следующие команды:
sudo apt-get install libcap2-bin sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
Теперь, когда вы указываете приложение узла, которое вы хотите запустить на порт 80, оно не будет жаловаться.
blockquote>
Непривилегированный пользователь (не root) не может открыть прослушивающий сокет на портах ниже 1024.
Я тоже получил эту ошибку на моем mac. Я использую «npm run dev» для запуска приложения nodejs в окнах, и он отлично работает. но я получил эту ошибку на моей mac-ошибке: Error: bind EACCES null: 80 mac.
решение № 1: «Отдайте корневой доступ и запустите его (что обычно). используйте 'sudo npm run dev' и вам нужно ввести пароль, это работает для меня. надеюсь, что это может помочь!
ссылка: Ошибка Node.js EACCES при прослушивании на порту http 80 (разрешение отклонено)