web-dev-qa-db-fra.com

Erreur: écoutez EACCES 0.0.0.0:80 OSx Node.js

Je suis un tutoriel dans un livre angularJS et je dois installer un serveur. C'est le fichier server.js:

 var express = require('express');
  var app = express();
   app.use('/', express.static('./'));
    app.listen(80);

Je reçois cette erreur:

$ node server.js
events.js:154
      throw er; // Unhandled 'error' event
      ^

Error: listen EACCES 0.0.0.0:80

Je sais déjà que l'erreur EACCES signifie que je n'ai pas de droits d'accès sur le port 80, mais je ne sais pas comment résoudre ce problème. Toute aide très appréciée!

55
olivier

Si vous devez exécuter le serveur sur le port 80, vous devez utiliser un proxy inverse, tel que nginx , qui s'exécutera à l'aide d'un compte système sur un port privilégié et met en proxy les demandes adressées à votre serveur Node.js s'exécutant sur un environnement non privilégié. port (> 1024).

Lorsque vous travaillez dans un environnement de développement, vous êtes quasiment libre d’exécuter en tant que root (c.-à-d. Sudo node server.js), mais cela est plutôt dangereux dans un environnement de production.

Voici un exemple de configuration nginx qui verra si la demande concerne un fichier existant dans le système de fichiers et, si ce n’est pas le cas, envoie la requête à votre serveur Node.js exécuté sur le port 9000.

upstream yournodeapp {
  server localhost:9000 fail_timeout=0;
  keepalive 60;
}

server {
  server_name localhost;
  listen 80 default_server;

  # Serve static assets from this folder
  root /home/user/project/public;

  location / {
    try_files $uri @yournodeapp;
  }

  location @yournodeapp {
    proxy_pass http://yournodeapp;
    proxy_set_header Host $Host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}
55
vesse

pour donner un accès root au noeud et démarrer le serveur sur le port 80, vous pouvez le faire

Sudo node app.js

cela démarrera le serveur donnant l'autorisation sur le port 80

50
DeveloperCoding

Avant tout, ne lancez pas en tant que root. C'est ce qui est demandé. "C'est" vraiment mauvais. Allez voir le film . Ensuite, n'exécutez pas votre projet Web de nœud en tant que root.

// DO NOT DO THIS!
$ Sudo node app.js

// DO NOT DO THIS EITHER!
$ Sudo su -
# node app.js

À la place, utilisez PM2 et authbind pour le faire:

// %user% is whatever user is running your code
Sudo touch /etc/authbind/byport/80
Sudo chown %user% /etc/authbind/byport/80
Sudo chmod 755 /etc/authbind/byport/80

Ensuite, ajoutez cet alias à votre ~/.bash_aliases ou ~/.bashrc ou ~/.bash_profile:

alias pm2='authbind --deep pm2'

Ensuite, essayez avec pm2:

pm2 start app.js
10
azatar

Sous Windows, j'ai résolu ce problème en configurant Express pour qu'il écoute le port 8080 pour HTTP et 8443 pour HTTPS. Il n’aime vraiment pas utiliser ces ports dont le nombre est inférieur. De plus, j’ai IIS installé et en cours d’exécution, il pourrait donc y avoir également une sorte de conflit de ports.

1
Josh P