본문 바로가기
IT/Linux

[Linux] Apache(HTTPD) 웹 서버 구축

by Archiver Jun 2026. 1. 21.

1. 웹 서버와 Apache의 개념

웹 서버(Web Server)는 클라이언트(브라우저)의 HTTP 요청을 받아 HTML 문서나 이미지 등의 콘텐츠를 제공하는 서버이다.

  • Apache HTTP Server: 리눅스 환경에서 가장 널리 쓰이는 오픈소스 웹 서버 소프트웨어
  • 포트 번호: 기본적으로 TCP 80번 포트를 사용

2. Apache 기본 설치 및 서버 구성

가장 먼저 패키지를 설치하고 서버의 기본 관리 정보를 설정한다

# 1. 아파치 설치
dnf install -y httpd

# 2. 서버 관리자 설정 (에러 페이지 하단에 표시될 메일)
vi /etc/httpd/conf/httpd.conf
ServerAdmin web@jhlim.local

# 3. 메인 인덱스 페이지 생성
vi /var/www/html/index.html
<html><body><h1>JHLIM-WEB-SERVER1</h1></body></html>

# 4. 서비스 활성화 및 방화벽 설정
systemctl enable --now httpd
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

3. 가상 호스트(Virtual Host)의 개념과 구현

가상 호스트란 하나의 웹 서버(하나의 IP)에서 여러 개의 독립된 도메인(blog, intra 등)을 운영하는 기술이다.

3.1 여러 웹사이트를 서비스하는 3가지 방법

  1. IP 기반: 서버에 여러 IP를 할당하여 각 IP마다 다른 사이트 연결
  2. Port 기반: 동일 IP에서 포트 번호(80, 8080 등)를 달리하여 접속
  3. 이름(Name) 기반: 동일 IP/Port에서 도메인 주소(FQDN)로 사이트 구분 (가장 많이 사용하며 DNS 설정이 필수임)

3.2 가상 호스트 설정 (/etc/httpd/conf.d/vir.conf)

NameVirtualHost *:80

# Blog 사이트 설정
<VirtualHost *:80>
    ServerName blog.jhlim.local
    DocumentRoot /var/www/blog
</VirtualHost>

# Intra 사이트 설정
<VirtualHost *:80>
    ServerName intra.jhlim.local
    DocumentRoot /var/www/intra
</VirtualHost>

4. DNS 연동 및 서비스 확장

가상 호스트가 정상 작동하려면 DNS 서버에서 각 도메인 명칭을 서버 IP로 연결해줘야 한다.

  • DNS 레코드 추가 (/var/named/1):
    • blog A 10.0.0.11
    • intra A 10.0.0.12
  • 참고: 존 파일 수정 시 serial 번호를 반드시 갱신하고 named 서비스를 재시작해야 한다.
systemctl restart named

 

더보기
1. Serial 번호란 무엇인가?

Serial 번호는 존 파일(Zone File)의 버전 번호입니다. 보조 DNS 서버는 주기적으로 주 DNS 서버의 시리얼 번호를 확인하여, 자신이 가진 번호보다 높으면 "아, 설정이 변경되었구나!"라고 판단하고 새로운 정보를 복사해 갑니다(Zone Transfer).

  • 번호가 같거나 낮으면: 보조 서버는 데이터가 변경되지 않았다고 판단하여 업데이트를 수행하지 않습니다.
  • 권장 표기법: 보통 YYYYMMDDNN 형식을 많이 씁니다. (예: 2024052001 -> 2024년 5월 20일 첫 번째 수정)

2. Serial 번호 갱신이 필수인 이유

① 보조(Slave) 서버와의 동기화

주 서버에서 www IP를 10.0.0.11에서 10.0.0.50으로 바꿨더라도 시리얼 번호가 그대로라면, 보조 서버는 계속 예전 IP(10.0.0.11)를 서비스하게 됩니다. 이는 서비스 접속 불가로 이어질 수 있습니다.

② 클라이언트 캐시 갱신 (TTL)

DNS 정보는 각 서버의 캐시에 머무는데, 시리얼 번호가 변경되어야 이 정보들이 새롭게 갱신될 준비를 합니다.


3. 서비스 재시작(systemctl restart named)이 필요한 이유

리눅스의 named 서비스는 실행될 때 설정 파일과 존 파일을 메모리에 로드(Load)합니다.

 파일 수정 후: 하드디스크의 파일 내용만 바뀐 상태이며, 현재 동작 중인 메모리상의 DNS 정보는 수정 전 그대로입니다.

 재시작 후: 변경된 파일을 다시 읽어 들여 메모리에 올리기 때문에 이때부터 실제 서비스에 반영됩니다.


5. 웹 서버 보안 및 접근 제어

웹 서버의 특정 디렉터리에 대해 보안을 강화하는 방법이다.

5.1 IP 주소 기반 접근 제한 (Allow/Deny)

특정 IP만 접속을 허용하고 나머지는 거부하는 설정입니다.

<Directory "/var/www/blog">
    Order deny,allow
    Deny from all
    Allow from 10.0.0.101
</Directory>

5.2 사용자 인증 기반 접근 제한 (.htaccess)

아이디와 비밀번호를 입력해야 접속 가능한 페이지를 만든다.

  1. 인증 파일 생성: htpasswd -c /web/.auth a (사용자 a 추가)
  2. 규칙 설정: 해당 디렉터리에 .htaccess 파일을 생성하고 Require user a b 등의 내용을 작성한다.
  3. 허용 설정: 메인 설정에서 AllowOverride AuthConfig를 적용한다.

5. 종합 평가 및 시사점 (결론)

  • 인프라 유연성 확보: 가상 호스트 기술을 통해 한정된 서버 자원(IP)으로 여러 개의 웹 서비스를 독립적으로 운영할 수 있는 환경을 구축했다.
  • 다중 보안 체계 구축: IP 기반의 Order deny,allow와 사용자 기반의 AuthConfig를 적절히 혼합하여, 내부 인트라넷 환경에 필요한 다층 방어 체계를 실증하였다.
  • 향후 과제: 현재 80번(HTTP) 평문 통신으로 구성된 환경을 SSL/TLS 인증서를 적용한 443번(HTTPS) 암호화 통신으로 고도화할 필요가 있다.
반응형