2016-01-28 12 views
27

Podążam za tutorialem w książce angularJS i muszę skonfigurować serwer. Jest to plik server.js:Błąd: odsłuchaj EACCES 0.0.0.0:80 OSx Node.js

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

otrzymuję ten błąd:

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

Error: listen EACCES 0.0.0.0:80 

już wiem, że EACCES błąd oznacza, że ​​nie mam prawa dostępu do portu 80, ale nie wiem jak to naprawić. Każda pomoc doceniona!

+3

zmienić port na coś> 1024, np. 'app.listen (8080)' lub uruchom serwer jako root, 'sudo node server.js'. – georg

+0

Tak, działało. Dziękuję @georg i zmieniłem port. Dow wiesz, dlaczego ten błąd pojawia się w porcie 80? – olivier

+2

W wielu systemach musisz być 'root' (lub podobny), aby otworzyć porty poniżej 1024. Więc twoje wybory wybierz port powyżej 1024 lub, jeśli masz uprawnienia, uruchom swój kod jako' root'. –

Odpowiedz

23

Jeśli trzeba uruchomić serwer na porcie 80 należy użyć reverse proxy jak nginx który będzie działał za pomocą konta systemowego na uprzywilejowanej portu i pełnomocnika żądań do serwera node.js uruchomione na nieuprzywilejowany portu (> 1024).

Podczas pracy w środowisku programistycznym można uruchomić go jako root, ale jest to dość niebezpieczne w środowisku produkcyjnym.

Oto próbka nginx config, który będzie sprawdzić, czy żądanie dotyczy pliku, który istnieje w systemie plików, a jeśli nie, proxy żądanie do serwera node.js działa na porcie 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"; 
    } 
} 
30

do dać dostęp do węzła głównego i uruchomić serwer na porcie 80 można zrobić

sudo node app.js 

będzie uruchomić serwer dając pozwolenie na porcie 80

0

W systemie Windows naprawiłem to, ustawiając Express na nasłuch na porcie 8080 dla HTTP i 8443 dla HTTPS. Naprawdę nie lubi korzystania z tych portów niższego numeru. Mam również zainstalowane i uruchomione usługi IIS, więc może to być również pewien konflikt między portami.

+0

Usługi IIS zwykle pobierają port 80 dla witryny domyślnej. – philn5d

Powiązane problemy