CentOS 7에서 Apache 웹 서버가 시작되지 않는 문제를 해결하는 방법

안녕하세요. 일본서버, 미국서버 호스팅 전문 지구 IDC 기술팀입니다.

오늘은 CentOS 7에서 Apache 웹 서버가 시작되지 않는 문제를 해결하는 방법을 알아보겠습니다. systemctl start httpd 또는 systemctl restart httpd 실행 후 서비스가 실패한다면, 단순히 Apache를 재설치하기보다 설정 문법, 오류 로그, 포트 충돌, SSL 인증서, 파일 권한과 SELinux를 순서대로 확인해야 합니다.

CentOS 7의 Apache HTTP Server 서비스명은 httpd.service이며 기본 설정은 /etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf에서 읽습니다. 가장 빠른 진단 방법은 apachectl configtest로 설정 문법을 확인한 뒤 systemctl status, journalctl, /var/log/httpd/error_log를 함께 확인하는 것입니다.

적용 환경과 지원 상태

항목 내용
운영체제 CentOS Linux 7
패키지 httpd
서비스명 httpd.service
주 설정 파일 /etc/httpd/conf/httpd.conf
추가 설정 /etc/httpd/conf.d/*.conf
기본 오류 로그 /var/log/httpd/error_log

1. 서비스 상태와 오류 로그 확인

먼저 Apache 패키지와 서비스 상태를 확인합니다.

rpm -q httpd
sudo systemctl status httpd.service -l --no-pager
sudo systemctl is-active httpd.service
sudo systemctl is-enabled httpd.service

Active: failed가 표시되면 현재 부팅 세션의 httpd 로그를 확인합니다.

sudo journalctl -u httpd.service -b -n 100 --no-pager
sudo tail -n 100 /var/log/httpd/error_log

문제를 재현하면서 새 로그를 실시간으로 확인하려면 한 터미널에서 다음 명령을 실행합니다.

sudo journalctl -fu httpd.service

다른 터미널에서 Apache를 시작합니다.

sudo systemctl start httpd.service

systemd 상태에는 최종 종료 코드만 보이고 실제 원인은 Apache 자체 로그에 기록되는 경우가 많으므로 두 로그를 함께 확인하십시오.

2. Apache 설정 문법 검사

Apache가 시작되지 않을 때 가장 먼저 실행할 애플리케이션 검사 명령은 apachectl configtest입니다. Apache 공식 문서는 이 명령이 설정 파일을 읽어 문법 오류를 검사하고, 정상일 경우 Syntax OK를 표시한다고 설명합니다.

sudo apachectl configtest

같은 검사를 다음 명령으로도 실행할 수 있습니다.

sudo httpd -t

오류가 발생하면 보통 문제가 있는 설정 파일과 줄 번호가 함께 표시됩니다. CentOS 7의 Apache는 기본적으로 다음 경로를 읽습니다.

  • /etc/httpd/conf/httpd.conf — 주 설정 파일
  • /etc/httpd/conf.d/*.conf — 가상호스트, SSL, 애플리케이션별 추가 설정
  • /etc/httpd/conf.modules.d/*.conf — 모듈 로드 설정

최근 수정된 설정 파일을 찾을 때는 다음 명령을 사용할 수 있습니다.

sudo find /etc/httpd -type f -name '*.conf' -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort -r | head -n 20

3. 80·443 포트 충돌 확인

로그에 Address already in use 또는 make_sock: could not bind to address와 비슷한 내용이 있다면 Apache가 사용하려는 포트를 다른 프로세스가 이미 점유하고 있을 수 있습니다.

sudo ss -lntp | grep -E ':(80|443) '

Apache 설정에서 실제 Listen 지시어도 확인합니다.

sudo grep -RniE '^[[:space:]]*Listen[[:space:]]' /etc/httpd/conf /etc/httpd/conf.d

Nginx, 다른 Apache 인스턴스, 애플리케이션 서버가 같은 포트를 사용 중이라면 해당 서비스의 역할을 확인한 뒤 한쪽의 포트 또는 프록시 구성을 조정해야 합니다.

4. SSL 인증서와 개인키 설정 확인

mod_ssl을 사용하고 있다면 잘못된 인증서 경로, 개인키 누락, 읽기 권한 문제 또는 인증서와 키 불일치 때문에 httpd가 시작되지 않을 수 있습니다. 먼저 SSL 관련 설정 위치를 확인합니다.

rpm -q mod_ssl
sudo grep -RniE '^[[:space:]]*(SSLCertificateFile|SSLCertificateKeyFile|SSLCertificateChainFile)[[:space:]]' /etc/httpd

설정에 지정된 인증서와 개인키 파일이 실제로 존재하고 Apache 시작 과정에서 읽을 수 있는지 확인합니다. 아래 경로는 실제 설정값으로 변경하십시오.

sudo ls -l /PATH/TO/CERTIFICATE.crt
sudo ls -l /PATH/TO/PRIVATE.key
sudo apachectl configtest

인증서 갱신이나 파일 이동 직후 문제가 발생했다면 이전 설정과 새 파일 경로가 일치하는지 먼저 확인하십시오. 개인키 파일의 내용을 화면에 출력하거나 외부에 공유해서는 안 됩니다.

5. 파일과 디렉터리 권한 확인

설정 파일, 로그 디렉터리, 인증서 또는 DocumentRoot의 상위 경로 권한이 잘못되어도 Apache가 시작 단계에서 필요한 파일을 읽지 못할 수 있습니다.

sudo namei -l /etc/httpd/conf/httpd.conf
sudo ls -ld /var/log/httpd
sudo ls -l /var/log/httpd

기본 패키지가 관리하는 주요 파일의 변경 여부를 확인하려면 RPM 검증도 사용할 수 있습니다.

rpm -V httpd

출력이 있다고 해서 모두 장애 원인인 것은 아닙니다. 관리자가 의도적으로 수정한 설정 파일도 검증 결과에 표시될 수 있으므로 변경된 파일과 실제 오류 로그를 함께 비교해야 합니다.

6. SELinux로 Apache 시작이 차단되는지 확인

CentOS 7에서 SELinux가 Enforcing 상태라면 비표준 포트를 사용하거나 웹 파일을 기본 경로 밖으로 이동했을 때 httpd가 접근 또는 바인딩을 거부당할 수 있습니다.

getenforce
sudo ausearch -m AVC,USER_AVC -ts recent | grep -i httpd

비표준 HTTP 포트를 사용하는 경우

Red Hat 문서에서는 httpd가 SELinux 정책에 등록되지 않은 비표준 포트에 바인딩하려 하면 서비스 시작이 실패할 수 있다고 설명합니다. 허용된 HTTP 포트를 확인합니다.

sudo semanage port -l | grep -w http_port_t

semanage 명령이 없다면 CentOS 7에서는 일반적으로 policycoreutils-python 패키지가 필요합니다. EOL 저장소가 정상적으로 구성된 환경에서만 설치를 진행하십시오.

예를 들어 Apache를 TCP 8080에서 실행하고 해당 포트가 http_port_t에 없다면 다음처럼 SELinux 포트 정책에 추가할 수 있습니다.

sudo semanage port -a -t http_port_t -p tcp 8080

DocumentRoot를 다른 경로로 변경한 경우

기본 /var/www/html이 아닌 경로를 사용하는 경우 SELinux 파일 컨텍스트를 확인합니다. 아래 /srv/myweb는 실제 경로로 변경하십시오.

ls -ldZ /srv/myweb
sudo semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
sudo restorecon -Rv /srv/myweb

7. 디스크·inode·PID 파일 문제 확인

루트 파일시스템이나 /var가 가득 차면 Apache가 로그, PID 파일 또는 임시 파일을 생성하지 못해 시작에 실패할 수 있습니다.

df -h
df -i

디스크 사용률은 낮아도 inode가 100%라면 새 파일을 만들 수 없습니다. Apache 로그 디렉터리와 systemd 런타임 경로도 확인합니다.

sudo ls -ld /var/log/httpd /run/httpd 2>/dev/null
ps -ef | grep '[h]ttpd'

PID 파일 관련 오류가 있어도 실제 httpd 프로세스가 살아 있는지 확인하지 않고 PID 파일을 먼저 삭제하지 마십시오. 기존 인스턴스가 실행 중인 경우 포트 충돌과 중복 실행 문제가 발생할 수 있습니다.

8. 패키지와 Apache 모듈 상태 확인

설정에 특정 모듈 지시어를 사용하는데 해당 모듈이 로드되지 않으면 설정 검사 단계에서 오류가 발생할 수 있습니다. 현재 로드 가능한 모듈과 가상호스트 구성을 확인합니다.

sudo httpd -M
sudo apachectl -S

httpd 패키지가 손상되었는지 확인합니다.

rpm -q httpd
rpm -V httpd

패키지 재설치는 설정 오류, 포트 충돌, SELinux 문제를 해결하지 못하므로 마지막 단계에서만 검토하십시오. CentOS 7은 EOL이므로 재설치를 시도하기 전에 현재 YUM 저장소가 정상적인 보관 저장소를 가리키는지도 확인해야 합니다.

9. 수정 후 정상 작동 확인

원인을 수정한 뒤 설정 문법을 다시 검사하고 서비스를 시작합니다.

sudo apachectl configtest
sudo systemctl reset-failed httpd.service
sudo systemctl start httpd.service
sudo systemctl is-active httpd.service
sudo systemctl status httpd.service -l --no-pager

is-active 결과가 active인지 확인하고 실제 포트가 열렸는지도 확인합니다.

sudo ss -lntp | grep httpd
curl -I http://127.0.0.1/

HTTPS를 설정한 서버라면 로컬 TLS 응답도 확인할 수 있습니다.

curl -kI https://127.0.0.1/

Apache는 실행 중이지만 외부 접속만 되지 않는다면 서비스 시작 문제가 아니라 firewalld, iptables, 상위 방화벽, 라우팅 또는 가상호스트 문제일 수 있습니다.

부팅 시 자동 시작이 필요한 서버라면 정상 작동을 충분히 확인한 후 활성화합니다.

sudo systemctl enable httpd.service
sudo systemctl is-enabled httpd.service

10. 자주 발생하는 오류와 해결 방법

Apache 시작 실패 진단표
증상 가능한 원인 확인 방법 해결 방향
Syntax error httpd.conf 또는 conf.d 문법 오류 apachectl configtest 오류 파일·줄을 수정 후 재검사
Address already in use 80·443 또는 지정 포트를 다른 프로세스가 점유 ss -lntp 중복 서비스 또는 Listen 설정 조정
SSL 인증서 파일을 열 수 없음 잘못된 경로, 파일 누락, 권한 문제 SSL 지시어와 ls -l 확인 올바른 인증서·키 경로와 권한 복구
비표준 포트에서 시작 실패 SELinux 포트 타입 미등록 semanage port -l, AVC 로그 필요 포트를 http_port_t에 등록
새 DocumentRoot 사용 후 오류 SELinux 파일 컨텍스트 또는 상위 경로 권한 문제 ls -Z, ausearch, namei -l 적절한 컨텍스트와 디렉터리 권한 적용
No space left on device 디스크 또는 inode 부족 df -h, df -i 불필요한 파일·로그를 안전하게 정리
서비스는 active지만 외부 접속 불가 방화벽·라우팅·가상호스트 문제 curl 127.0.0.1, ss, 방화벽 확인 서비스 시작 문제와 네트워크 문제를 분리해 진단

11. 원상복구 방법

Apache 설정을 수정하기 전에는 전체 설정 디렉터리를 백업하는 것이 좋습니다.

sudo cp -a /etc/httpd /root/httpd-config-backup

변경 후 서비스가 더 이상 시작되지 않고 원인을 빠르게 되돌려야 한다면 백업과 현재 설정의 차이를 먼저 확인합니다.

sudo diff -ruN /root/httpd-config-backup /etc/httpd

문제가 특정 설정 파일을 추가한 직후 발생했다면 파일을 바로 삭제하지 말고 비활성 이름으로 이동한 뒤 설정 검사를 수행할 수 있습니다. 아래 파일명은 실제 파일로 변경하십시오.

sudo mv /etc/httpd/conf.d/example.conf /etc/httpd/conf.d/example.conf.disabled
sudo apachectl configtest
sudo systemctl restart httpd.service

SELinux 포트 또는 파일 컨텍스트를 변경했다면 변경 목적과 원래 값을 기록해 두고, 해당 서비스 구성이 원래대로 돌아갔을 때 불필요한 사용자 정책만 제거하십시오.

관련 지구 IDC 기술자료

공식 참고자료

기관 문서 확인 내용 조회일
Red Hat RHEL 7 System Administrator's Guide — Web Servers httpd 서비스, 설정 경로, apachectl configtest, 서비스 상태 확인
Apache Software Foundation apachectl — Apache HTTP Server Control Interface configtest와 재시작 전 설정 검사 동작
Red Hat SELinux User's and Administrator's Guide — Apache HTTP Server httpd 파일 컨텍스트와 비표준 포트의 SELinux 정책
CentOS Project CentOS Linux CentOS Linux 7 EOL 날짜 확인

자주 묻는 질문

Apache가 시작되지 않을 때 가장 먼저 실행할 명령은 무엇인가요?

sudo apachectl configtest를 먼저 실행하는 것이 좋습니다. 설정 문법 오류가 있다면 파일과 줄 번호가 표시되는 경우가 많아 원인을 빠르게 찾을 수 있습니다. 이후 systemctl status httpdjournalctl -u httpd를 함께 확인하십시오.

httpd가 active인데 웹사이트가 접속되지 않습니다.

이 경우 Apache 시작 실패와는 다른 문제일 가능성이 높습니다. ss -lntp로 수신 포트를 확인하고 curl http://127.0.0.1로 로컬 응답을 확인한 뒤 firewalld, iptables, 상위 방화벽, DNS와 가상호스트 설정을 점검하십시오.

SELinux를 끄면 Apache가 시작되는데 그대로 사용해도 되나요?

권장하지 않습니다. SELinux를 끄면 증상이 사라질 수 있지만 근본 원인은 비표준 포트, 잘못된 파일 컨텍스트 또는 필요한 접근 정책일 수 있습니다. AVC 로그를 확인하고 원인에 맞는 SELinux 설정을 수정하십시오.

Apache를 재설치하면 해결되나요?

설정 문법 오류, 포트 충돌, SSL 파일 경로, SELinux, 디스크 부족은 재설치로 해결되지 않습니다. 패키지 손상이 확인된 경우에만 재설치를 검토하는 것이 좋습니다.

CentOS 7에서 Apache를 계속 운영해도 되나요?

서비스 자체는 동작할 수 있지만 CentOS Linux 7은 2024년 6월 30일 공식 지원이 종료되었습니다. 새로운 일반 보안 업데이트가 제공되지 않으므로 장기 운영 서버는 지원 중인 운영체제로 이전하는 것이 필요합니다.

마무리

오늘은 CentOS 7에서 Apache 웹 서버가 시작되지 않을 때 apachectl configtest와 systemd 로그를 기준으로 설정 문법, 포트 충돌, SSL 인증서, 파일 권한, SELinux, 디스크와 패키지 상태를 순서대로 확인하는 방법을 설명드렸습니다.

Apache 장애는 원인이 서로 다르기 때문에 무조건 재설치하거나 SELinux를 비활성화하기보다 오류 로그에 표시된 첫 번째 실제 원인을 확인하고 수정한 뒤 설정 검사와 로컬 접속으로 재검증하는 것이 중요합니다.

지구 IDC는 일본서버와 미국서버를 포함한 다양한 서버 호스팅 환경에서 안정적인 운영에 도움이 되는 기술정보를 지속적으로 제공하겠습니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back