서버를 설정하고 NGINX를 사용하다 보면, 가끔 오류를 만날 때가 있습니다. 이 오류는 주로 포트 80을 다른 프로세스가 사용하고 있을 때 발생하며, 여러 가지 권한 이슈로 인해 NGINX가 정상적으로 실행되지 않는 문제를 초래할 수 있습니다. 이번 글에서는 이 문제를 해결했던 경험을 공유하고자 합니다.
포트 80 점유: 포트 80을 이미 NGINX가 점유하고 있었기 때문에 새로운 바인딩 시도에서 오류가 발생함.
루트와 일반 계정 권한 충돌: 루트 권한과 일반 ubuntu 계정 권한이 섞여 사용되면서 혼란이 생긴 것 같았습니다. 즉, NGINX 프로세스를 루트 계정으로 실행하는 경우와 일반 계정으로 실행하는 경우의 차이로 인해 문제가 발생할 수 있습니다.
문제를 해결하기 위해 다음과 같은 절차를 수행했습니다.
sudo netstat -anp | grep LISTEN | grep :80
이 명령어를 통해 어떤 프로세스가 포트 80을 사용하고 있는지 확인할 수 있습니다. 저의 경우 이미 NGINX가 포트 80을 점유하고 있었기 때문에, 새로운 프로세스를 실행할 때 충돌이 발생했습니다.
sudo fuser -k -n tcp 80
위 명령어를 사용해 포트 80을 점유하고 있던 프로세스를 강제로 종료했습니다. 이 방법은 포트를 사용 중인 프로세스를 강제로 종료하기 때문에, 최후의 수단으로 사용해야 합니다.
sudo systemctl start nginx
포트 점유 문제가 해결되었으므로 NGINX를 다시 시작하여 정상적으로 실행되도록 했습니다.
이 과정에서 깨달은 것은 루트 권한으로 NGINX를 실행하는 것보다, ubuntu와 같은 일반 계정 권한으로 NGINX를 실행하는 것이 더 안전하고 권장된다는 점이었습니다. 루트 권한으로 실행하다 보면 프로세스 관리 및 권한 이슈로 인해 혼란이 생길 수 있습니다. 따라서 다음과 같은 권장 사항을 제시합니다:
가능하면 루트 권한을 사용하지 말 것: NGINX, PM2 등 서버 프로세스를 실행할 때는 가능하면 루트 권한을 사용하지 않는 것이 좋습니다.
명확한 권한 설정: NGINX가 사용하는 모든 파일 및 디렉토리의 소유자와 권한을 명확히 설정하여, 루트와 일반 계정 간의 권한 충돌을 방지해야 합니다.
NGINX에서 bind() to 0.0.0.0:80 failed 오류는 주로 포트 점유와 권한 설정 문제로 발생합니다. 이 문제를 해결하기 위해 포트 점유 상태를 확인하고, 필요시 해당 프로세스를 종료한 뒤 NGINX를 다시 실행하면 됩니다. 또한, 권한 이슈를 방지하기 위해 루트 권한을 최소화하고, 일반 계정으로 서버를 관리하는 것이 권장됩니다.
짧은 경험을 바탕으로 작성한 내용이지만, 비슷한 문제를 겪는 분들에게 도움이 되길 바랍니다.