Запуск приложения узла навсегда с помощью sudo приводит к ошибкам [дубликат]

194
задан jwegner 6 February 2012 в 20:13
поделиться

11 ответов

Выполнение на вашей рабочей станции

Как правило, процессы, выполняющиеся без привилегий root, не могут связываться с портами ниже 1024.

Так что попробуйте более высокий порт или запустите с повышенными привилегиями с помощью sudo. Вы можете понизить привилегии после того, как вы привязались к нижнему порту, используя process.setgid и process.setuid .

Выполняется на heroku

При запуске ваших приложений на 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);
});
285
ответ дан Alex Choroshin 26 August 2018 в 04:10
поделиться

Это означает, что узел не может прослушивать определенный порт. Измените его на 1234 или 2000 или 3000 и перезапустите сервер.

3
ответ дан Bo Persson 26 August 2018 в 04:10
поделиться

OMG !! В моем случае я делал ....listen(ip, port) вместо ...listen(port, ip), и это вызывало ошибку msg: Error: listen EACCES localhost

Я использовал номера портов> = 3000 и даже пытался с доступом администратора. Ничего не получилось. Затем, с более близким переосмыслением, я заметил проблему. Изменил его на ...listen(port, ip), и все начало работать нормально !!

Просто назовите это в случае, если это полезно кому-то другому ...

2
ответ дан Dilip Muthukurussimana 26 August 2018 в 04:10
поделиться

Попробуйте authbind:

http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html

После установки , вы можете добавить файл с именем номера порта, который вы хотите использовать, в следующей папке: / etc / authbind / byport /

Дайте ему 500 разрешений с помощью chmod и измените право собственности на пользователя, которого вы хотите запустить программу под.

После этого выполните «authbind node ...» в качестве этого пользователя в вашем проекте.

1
ответ дан DraughtGlobe 26 August 2018 в 04:10
поделиться

Другой подход заключается в перенаправлении портов:

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 ) порт между прочим.

4
ответ дан eleven 26 August 2018 в 04:10
поделиться

это происходит, если порт, который вы пытаетесь локально размещать, является portfowarded

1
ответ дан Jasper Smith 26 August 2018 в 04:10
поделиться

Я получил эту ошибку на своем mac, потому что он запускал сервер Apache по умолчанию, используя тот же порт, что и тот, который используется сервером узлов, который в моем случае был портом 80. Все, что мне нужно было сделать, это остановить его с помощью sudo apachectl stop

Надеюсь, это кому-то поможет.

1
ответ дан mabounassif 26 August 2018 в 04:10
поделиться

Помните, если вы используете sudo для привязки к порту 80 и используете переменные env PORT & amp; NODE_ENV вы должны повторно экспортировать эти вары, поскольку теперь вы находитесь под корневым профилем, а не с вашим профилем пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:

sudo su
export NODE_ENV=production
export PORT=80
docpad run
1
ответ дан PA. 26 August 2018 в 04:10
поделиться

Проверьте эту ссылку :

Предоставьте безопасное разрешение пользователя для использования порта 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, оно не будет жаловаться.

73
ответ дан ruffin 26 August 2018 в 04:10
поделиться

Непривилегированный пользователь (не root) не может открыть прослушивающий сокет на портах ниже 1024.

152
ответ дан user1303768 26 August 2018 в 04:10
поделиться

Я тоже получил эту ошибку на моем mac. Я использую «npm run dev» для запуска приложения nodejs в окнах, и он отлично работает. но я получил эту ошибку на моей mac-ошибке: Error: bind EACCES null: 80 mac.

решение № 1: «Отдайте корневой доступ и запустите его (что обычно). используйте 'sudo npm run dev' и вам нужно ввести пароль, это работает для меня. надеюсь, что это может помочь!

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

1
ответ дан ZILONG PAN 26 August 2018 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: