Testuję aplikację (mam nadzieję, że uruchomię ją na Heroku, ale mam również problemy lokalnie). Daje mi błąd EACCES, gdy działa http.Server.listen () - ale występuje tylko na niektórych portach.
Więc lokalnie działam:
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
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)
Nie mam nic uruchomionego na porcie 900 (lub innym 20 innych portów, których próbowałem), więc to powinno działać. Dziwne jest to, że to nie działa na niektórych portach. Na przykład port 3000 działa idealnie.
Co by to spowodowało?
Aktualizacja 1:
Zrozumiałem, że na moim komputerze lokalnym pojawia się błąd EACCES, ponieważ muszę uruchomić węzeł jako root, aby połączyć się z tymi niektórymi portami. Nie wiem, dlaczego tak się dzieje, ale użycie sudo naprawia to. Nie wyjaśnia to jednak, jak naprawiłbym to na Heroku. Nie ma sposobu, aby uruchomić się jako root na Heroku, więc jak mogę słuchać na porcie 80?
źródło
Odpowiedzi:
Uruchamianie na stacji roboczej
Zasadniczo procesy działające bez uprawnień administratora nie mogą łączyć się z portami poniżej 1024.
Wypróbuj wyższy port lub uruchom z podwyższonymi uprawnieniami przez
sudo
. Możesz obniżyć uprawnienia po połączeniu z niskim portem za pomocąprocess.setgid
iprocess.setuid
.Działa na heroku
Podczas uruchamiania aplikacji na heroku musisz użyć portu określonego w zmiennej środowiskowej PORT.
Zobacz http://devcenter.heroku.com/articles/node-js
źródło
crossdomain.xml
przez port 843.Użytkownik nieuprzywilejowany (nie root) nie może otworzyć gniazda nasłuchującego na portach poniżej 1024.
źródło
sudo
podczas uruchamiania serwera ekspresowego za pomocą węzła (faktycznie gulp). To nie ma sensuSprawdź ten link referencyjny :
źródło
pm2 kill
i ponownie utwórz.Innym podejściem jest przekierowanie portu:
I uruchom serwer na porcie> 1024:
ps przy okazji, to samo można zrobić dla portu https (443).
źródło
Oznacza to, że węzeł nie może nasłuchiwać na określonym porcie. Zmień go na coś w rodzaju 1234 lub 2000 lub 3000 i zrestartuj serwer.
źródło
O MÓJ BOŻE!! W moim przypadku robiłem
....listen(ip, port)
zamiast tego...listen(port, ip)
i to powodowało błąd msg:Error: listen EACCES localhost
Używałem numerów portów> = 3000, a nawet próbowałem z dostępem administratora. Nic nie wyszło. Potem przy bliższym odświeżeniu zauważyłem problem. Zmieniłem to na
...listen(port, ip)
i wszystko zaczęło działać dobrze !!Wywoływanie tego na wypadek, gdyby było przydatne dla kogoś innego ...
źródło
....listen(ip, port)
w swojej odpowiedzi (z czterema.
)? Minęła minuta, zanim zdałem sobie sprawę, że przez to mówisz o kolejności argumentów.....
(czterech kropek), co moim zdaniem było oczywiste.Wystąpił ten błąd na moim komputerze Mac, ponieważ domyślnie działał on na serwerze Apache przy użyciu tego samego portu, który jest używany przez serwer węzła, którym w moim przypadku był port 80. Wszystko, co musiałem zrobić, to zatrzymać go za pomocą
sudo apachectl stop
Mam nadzieję, że to komuś pomoże.
źródło
Mam również ten błąd na komputerze Mac. Używam
npm run dev
do uruchamiania mojej aplikacji Nodejs w systemie Windows i działa dobrze. Ale dostałem ten błąd na moim komputerze Mac -error given was: Error: bind EACCES null:80
.Jednym ze sposobów rozwiązania tego problemu jest uruchomienie go z dostępem do konta root. Możesz użyć
sudo npm run dev
i będziesz musiał podać hasło.Zasadniczo lepiej jest obsługiwać aplikację na nieuprzywilejowanym porcie, takim jak 3000, który będzie działał bez uprawnień roota.
odwołanie: błąd EACCES Node.js podczas nasłuchiwania na porcie http 80 (odmowa dostępu)
źródło
Miałem podobny problem, że odmawiał uruchomienia na porcie 8080, ale także dowolny innym.
Okazuje się, że to dlatego
env.local
, że odczytany plik zawierał komentarze po nazwach zmiennych, takich jak:I tak to interpretował, próbując użyć portu „
8080 # The port the server runs at
”, który jest oczywiście nieprawidłowym portem (-1). Usunięcie komentarzy całkowicie go rozwiązało.Nawiasem mówiąc, używając Windows 10 i Git Bash.
Wiem, że nie jest to dokładnie opisany tutaj problem, ale może komuś pomóc. Wylądowałem na tym pytaniu, szukając problemu dla mojej odpowiedzi, więc ... może?
źródło
Pamiętaj, że jeśli używasz sudo do łączenia się z portem 80 i używasz zmiennych env PORT & NODE_ENV, musisz ponownie wyeksportować te zmienne, ponieważ jesteś teraz w profilu root, a nie w profilu użytkownika. Aby to działało na moim komputerze Mac, wykonałem następujące czynności:
źródło
dzieje się tak, jeśli port, na którym próbujesz hostować lokalnie, jest włączony do portfela
źródło
Spróbuj authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
Po instalacji możesz dodać plik z nazwą numeru portu, którego chcesz użyć w następującym folderze: / etc / authbind / byport /
Nadaj mu 500 uprawnień za pomocą chmod i zmień właściciela na użytkownika, na którym chcesz uruchomić program.
Następnie wykonaj „authbind node ...” jako ten użytkownik w swoim projekcie.
źródło
Mój błąd został rozwiązany przez zmianę numeru portu w server.js Specjalnie w tym wierszu
Zmieniłem numer portu na 8085 z 8080.
Mam nadzieję, że to pomoże.
źródło
Po wypróbowaniu wielu różnych sposobów ponowne zainstalowanie IIS w moich oknach rozwiązało problem.
źródło
Mój błąd został rozwiązany za pomocą (w systemie Windows)
Zezwól aplikacji NodeJS na dostęp do sieci w Zaporze systemu Windows.
źródło
restart nie był wystarczający! Jedynym sposobem rozwiązania tego problemu jest:
Musisz zabić usługę działającą w tym porcie.
w cmd, uruchom jako admin, a następnie wpisz: netstat -aon | znajdź / i „słucham”
otrzymasz listę z aktywną usługą, wyszukaj port działający na 4200 i użyj identyfikatora procesu, który jest ostatnią kolumną, aby go zabić
: taskkill / F / PID 2652
źródło