리눅스 환경에서 nestjs로 만든 서버를 80번 포트를 사용해서 시작을 했다.
Error: listen EACCES: permission denied 0.0.0.0:80 이라는 메세지가 뜨며 서버가 강제종료 되었다.
해당 에러가 뜬 원인과 해결방법에 대해서 알아보자.
환경
nodejs: 16.x
ubuntu: 18.04
원인
이런 에러는 왜 나는 것일까?
리눅스에서 기본적으로 1024번 미만의 TCP/IP 포트 번호는 일반 사용자가 사용할수 없다. 그런데 나는 기본적으로 ubuntu의 계정으로 git pull을 받았기 때문에 서버 폴더와 해당 폴더의 모든 파일의 소유자가 ubuntu 였다.
따라서 일반 사용자인 ubuntu로 80 포트를 열려고 하니 오류가 발생한 것이였다.
해결방법
해결방법은 간단하다. 해당 폴더와 해당 폴더에 있는 모든 파일의 소유를 root 계정으로 바꿔주고 루트로 접속해서 실행하면된다.
1. 폴더와 폴더의 하위 모든 파일을 root로 권한 변경
// ex) $ sudo chown -R root:root nestSetting/
$ sudo chown -R root:root 폴더이름
chown을 사용해서 하위 폴더와 파일들까지 모두 root로 변경하였다.
2. root로 로그인
sudo su
3. 프로젝트 폴더에서 npm start
다시 npm start를 해보면 성공적으로 서버가 실행되는 것을 확인할 수 있다.
또 다른 해결 방법
또 다른 해결 방법이 있다. 서버를 1024번 이상의 폴더에서 열고 iptable을 사용해서 redirect 해주는 방법을 사용할 수도 있다.
1. 기존 서버의 포트를 80번에서 8080으로 변경 (1024번 이상의 포트번호면 아무거나 상관없다.)
2. 서버 실행
3. 아래 명령어를 통해서 80포트를 8080포트로 redirect
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080