javascript - Errore EACCES Node.js durante l'ascolto sulla porta http 80(permesso negato)



express permission-denied (1)

Cordiali saluti: non è possibile eseguire socket sulle porte <1024 con normale autorizzazione dell'utente. È necessario disporre dell'accesso root per questo.

Ci sono 3 modi per risolvere l'errore in totale:

1. Fornire l'accesso root ed eseguirlo (che è solito)

2. Reindirizzare su un'altra porta

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

Quindi lanciare il mio Node.js sulla porta 3000. Le richieste alla porta 80 verranno mappate alla porta 3000.

Dovresti anche modificare il tuo file /etc/rc.local e aggiungere quella linea meno il sudo. Ciò aggiungerà il reindirizzamento all'avvio della macchina. Non hai bisogno di sudo in /etc/rc.local perché i comandi sono eseguiti come root all'avvio del sistema.

Link di riferimento

3. Fornire la normale capacità dell'utente di utilizzare i socket come root

Obiettivo: - Non stiamo fornendo accesso root completo e solo dando l'autorizzazione socket_root ad accedervi da utente normale per eseguire il server su qualsiasi porta.

NON vogliamo eseguire le tue applicazioni come utente root, ma c'è un problema: il tuo utente sicuro non ha il permesso di usare la porta HTTP predefinita (80). L'obiettivo è essere in grado di pubblicare un sito Web che i visitatori possono utilizzare navigando verso un URL facile da usare come http://localhost .

Sfortunatamente, a meno che tu non effettui l'accesso come root, normalmente dovrai utilizzare un URL come http://localhost:3000 - nota il numero di porta.

Molte persone rimangono bloccate qui, ma la soluzione è semplice. Ci sono alcune opzioni ma questa è quella che mi piace. Digita i seguenti comandi:

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

Ora, quando dici a un'applicazione Node che vuoi che venga eseguita sulla porta 80, non si lamenterà.

Link di riferimento

Informazioni generali Link di riferimento da apache

Node.js lancia il seguente errore mentre è in esecuzione sulla porta http 80 (porta predefinita): -

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)

Ho capito che il nodo deve avere accesso come root.

Convenzionalmente evitiamo di dare accesso alla radice in situazioni normali. Quali sono le migliori pratiche per utilizzarlo sulla porta 80 (o sulla porta <1024).

Questo link ha la stessa domanda ma ha solo una risposta, ovvero PREROUTING. Mentre la mia soluzione offre anche altri modi.

Sto scrivendo questo per avere tutte le risposte in un posto, dato che devo andare ad approfondire altre risorse rispetto al PREROUTING. Perché non tutte le risposte in un'unica posizione per condividere la conoscenza





permission-denied