웹 서버 포트 충돌 해결법 총정리: 리눅스에서 실무적으로 처리하는 방법
웹 서버를 실행하려고 했는데 아래와 같은 에러 메시지를 보신 적 있나요?
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
바로 포트 충돌(port conflict)입니다. 이 문제는 특히 리눅스 서버를 운영하면서 Nginx, Apache, 혹은 Node.js 같은 웹 서비스를 운영할 때 자주 겪게 됩니다.
이번 글에서는 웹 서버 포트 충돌이 발생하는 원인과 이를 해결하는 실무적 방법을 단계별로 소개합니다.
1. 포트 충돌이란?
리눅스 시스템에서 하나의 포트는 한 번에 하나의 프로세스만 사용할 수 있습니다. 예를 들어 80번 포트는 HTTP 트래픽의 기본 포트인데, 이미 Apache가 점유하고 있는데 Nginx가 또 사용하려고 하면 오류가 납니다.
2. 어떤 프로세스가 포트를 사용 중인지 확인하기
먼저 80번 포트를 점유하고 있는 프로세스를 확인합니다.
sudo lsof -i :80
또는 netstat을 사용할 수도 있습니다:
sudo netstat -tulpn | grep :80
출력 예:
tcp6 0 0 :::80 :::* LISTEN 1234/apache2
위 결과에서 PID(프로세스 ID)를 확인할 수 있습니다.
3. 프로세스 종료 또는 재시작
특정 프로세스를 종료해서 포트를 비우려면 다음과 같이 합니다:
sudo kill -9 [PID]
예: sudo kill -9 1234
만약 systemd로 관리되는 서비스라면 해당 서비스를 중지하는 게 더 안전합니다.
sudo systemctl stop apache2
그리고 포트 점유가 해결됐는지 재확인합니다.
sudo lsof -i :80
아무것도 안 나오면 이제 다른 서비스가 포트를 사용할 수 있습니다.
4. 웹 서버 포트 변경 (필요 시)
포트를 점유한 프로세스를 종료할 수 없는 상황이라면, 새로 띄우려는 웹 서버의 포트를 변경하는 것도 방법입니다.
Nginx의 경우:
server {
listen 8080;
server_name example.com;
...
}
Apache의 경우:
Listen 8080
변경 후 웹 서버를 재시작하세요.
sudo systemctl restart nginx
# 또는
sudo systemctl restart apache2
5. 부팅 시 자동 실행되는 서비스 확인
종종 포트 충돌의 원인이 “의도하지 않은 자동 실행”에 있습니다. 예를 들어 Apache를 쓰지 않는데도 부팅 시 자동으로 실행돼 포트를 점유하고 있을 수 있습니다.
sudo systemctl list-unit-files --type=service | grep enabled
불필요한 서비스는 disable 시켜두는 게 안전합니다.
sudo systemctl disable apache2
6. 방화벽 또는 SELinux로 인한 오해
가끔 포트 충돌로 오인되는 문제가 firewalld 혹은 SELinux 정책으로 인해 발생하기도 합니다. 포트가 열려 있어도 외부에서 접속이 안 될 수 있습니다.
sudo firewall-cmd --list-all
의심될 경우 일시적으로 방화벽을 끄고 확인해보는 것도 방법입니다.
sudo systemctl stop firewalld
주의: 실서버에서 이 방법은 신중하게 사용해야 합니다.
정리
- 포트 충돌은 대부분 이미 점유 중인 프로세스가 있는 경우 발생합니다.
- lsof, netstat으로 원인을 파악하고, systemctl로 서비스 정리
- 필요하다면 새 웹 서버의 포트를 변경하는 것도 방법
- 자동 실행되던 서비스는 disable로 막기
- 방화벽이나 SELinux 설정도 점검 대상
맺음말
웹 서버를 운영하다 보면 “갑자기 안 떠요”라는 문의의 절반은 포트 충돌 문제에서 시작됩니다.
기본적인 원인 파악 도구와 정리 습관만 잘 들여놓아도 운영 중단 시간을 줄일 수 있습니다.
이 포스트가 실무에서 도움이 되셨다면, 자주 쓰는 점검 스크립트로 만들어 두는 것도 추천드립니다.
'웹개발 > 서버 운영 & 인프라' 카테고리의 다른 글
| Nginx와 Apache 차이점 총정리: 어떤 웹서버를 써야 할까? (1) | 2025.08.02 |
|---|---|
| 리눅스에서 crontab으로 서비스 자동 재시작 설정하는 방법 (실무 예제 포함) (5) | 2025.08.01 |
| AWS EC2에 WAR 파일 배포, 실무에서는 이렇게 합니다 (Tomcat 환경 기준) (1) | 2025.07.19 |
| Sticky Session 없이 Tomcat 세션 공유? 실무에서 직접 설정한 방법 정리 (4) | 2025.07.19 |
| Apache + Tomcat 로드밸런싱 구성 방법 (mod_jk vs mod_proxy 실무 설정 예제) (0) | 2025.06.26 |