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가지 방법
- IP 기반: 서버에 여러 IP를 할당하여 각 IP마다 다른 사이트 연결
- Port 기반: 동일 IP에서 포트 번호(80, 8080 등)를 달리하여 접속
- 이름(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
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)
아이디와 비밀번호를 입력해야 접속 가능한 페이지를 만든다.
- 인증 파일 생성: htpasswd -c /web/.auth a (사용자 a 추가)
- 규칙 설정: 해당 디렉터리에 .htaccess 파일을 생성하고 Require user a b 등의 내용을 작성한다.
- 허용 설정: 메인 설정에서 AllowOverride AuthConfig를 적용한다.
5. 종합 평가 및 시사점 (결론)
- 인프라 유연성 확보: 가상 호스트 기술을 통해 한정된 서버 자원(IP)으로 여러 개의 웹 서비스를 독립적으로 운영할 수 있는 환경을 구축했다.
- 다중 보안 체계 구축: IP 기반의 Order deny,allow와 사용자 기반의 AuthConfig를 적절히 혼합하여, 내부 인트라넷 환경에 필요한 다층 방어 체계를 실증하였다.
- 향후 과제: 현재 80번(HTTP) 평문 통신으로 구성된 환경을 SSL/TLS 인증서를 적용한 443번(HTTPS) 암호화 통신으로 고도화할 필요가 있다.
'IT > Linux' 카테고리의 다른 글
| [Ansible] 실전 모듈 활용 (blockinfile, user, dnf) (0) | 2026.02.10 |
|---|---|
| [Ansible] 앤서블 기초 및 구성 관리 실습 정리 (0) | 2026.02.09 |
| [Linux] DNS / DNS이중화 (0) | 2026.01.20 |
| [Linux] DHCP-Server (1) | 2026.01.19 |
| [Linux] FTP Active vs Passive 모드 (1) | 2026.01.18 |