"오늘의 문제를, 내일의 기록으로 남깁니다."

막연한 이론보다, 구체적인 코드가 필요할 때. 직접 겪고 해결한 문제들을 기록합니다. 실무에서 부딪히는 진짜 이슈와, 내가 이해한 방식 그대로 정리한 가이드입니다.

웹개발/서버 운영 & 인프라

웹 서버 포트 충돌 해결법 총정리: 리눅스에서 실무적으로 처리하는 방법

자바를잡아 2025. 8. 3. 10:00
반응형

웹 서버 포트 충돌 해결법 총정리: 리눅스에서 실무적으로 처리하는 방법

웹 서버를 실행하려고 했는데 아래와 같은 에러 메시지를 보신 적 있나요?


(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 설정도 점검 대상

맺음말

웹 서버를 운영하다 보면 “갑자기 안 떠요”라는 문의의 절반은 포트 충돌 문제에서 시작됩니다.
기본적인 원인 파악 도구와 정리 습관만 잘 들여놓아도 운영 중단 시간을 줄일 수 있습니다.
이 포스트가 실무에서 도움이 되셨다면, 자주 쓰는 점검 스크립트로 만들어 두는 것도 추천드립니다.

반응형