Linux Apache 서버 구성 실습 2

Linux Apache 서버 구성 실습 2입니다. IP 기반 virtual host를 위해 추가 IP, nmcli 영구 설정, VirtualHost, apachectl -S, curl 검증을 정리했습니다.

Linux Apache 서버 구성 실습 2: IP 기반 Virtual Host

IP 기반 virtual host는 같은 Apache 서버에서 IP 주소별로 서로 다른 사이트를 제공하는 방식이다. 이름 기반 virtual host가 같은 IP에서 Host header를 보고 사이트를 나누는 방식이라면, IP 기반 virtual host는 요청이 들어온 목적지 IP 자체를 기준으로 사이트를 선택한다.

실습은 alias IP를 추가하고 rc.local로 유지한 뒤 Apache 설정 파일을 수정하는 흐름이었다. 현재 Linux에서는 임시 테스트는 ip addr add, 영구 설정은 NetworkManager의 nmcli로 관리하는 편이 낫다.

실습 구조

항목예시
기본 IP192.168.10.193
추가 IP192.168.10.194
site 1 DocumentRoot/home/httpd/site193
site 2 DocumentRoot/home/httpd/site194
Apache 설치 경로/app/apache

1. 현재 IP 확인

ip -br addr
ip route
nmcli con show

2. 임시 IP 추가

재부팅 전까지만 테스트할 때는 ip addr add가 빠르다. 실제 인터페이스명은 서버 환경에 맞게 바꾼다.

IFACE="ens33"
sudo ip addr add 192.168.10.194/24 dev "${IFACE}"
ip -br addr show "${IFACE}"

3. 영구 IP 추가

재부팅 후에도 유지하려면 NetworkManager connection에 주소를 추가한다.

nmcli con show

CON_NAME="System ens33"
sudo nmcli con mod "${CON_NAME}" +ipv4.addresses 192.168.10.194/24
sudo nmcli con up "${CON_NAME}"

ip -br addr show ens33

4. 사이트 디렉터리 생성

sudo mkdir -p /home/httpd/site193 /home/httpd/site194

echo "site on 192.168.10.193" | sudo tee /home/httpd/site193/index.html
echo "site on 192.168.10.194" | sudo tee /home/httpd/site194/index.html

sudo chown -R daemon:daemon /home/httpd/site193 /home/httpd/site194
sudo chmod -R 755 /home/httpd/site193 /home/httpd/site194

5. IP 기반 vhost 설정

소스 설치 기준으로 /app/apache/conf/extra/httpd-vhosts.conf에 설정을 넣는다. 메인 httpd.conf에서 해당 파일이 include되어 있어야 한다.

grep -n "httpd-vhosts.conf" /app/apache/conf/httpd.conf

주석 처리되어 있다면 include를 활성화한다.

Include conf/extra/httpd-vhosts.conf

vhost 파일 예시는 다음과 같다.

Listen 192.168.10.193:80
Listen 192.168.10.194:80

<VirtualHost 192.168.10.193:80>
 ServerName site193.local
 DocumentRoot "/home/httpd/site193"
 ErrorLog "logs/site193-error.log"
 CustomLog "logs/site193-access.log" common

 <Directory "/home/httpd/site193">
 Require all granted
 AllowOverride None
 </Directory>
</VirtualHost>

<VirtualHost 192.168.10.194:80>
 ServerName site194.local
 DocumentRoot "/home/httpd/site194"
 ErrorLog "logs/site194-error.log"
 CustomLog "logs/site194-access.log" common

 <Directory "/home/httpd/site194">
 Require all granted
 AllowOverride None
 </Directory>
</VirtualHost>

6. 문법 검사와 적용

sudo /app/apache/bin/apachectl configtest
sudo /app/apache/bin/apachectl -S
sudo systemctl reload apache-custom

7. 접속 테스트

curl http://192.168.10.193/
curl http://192.168.10.194/

tail -n 20 /app/apache/logs/site193-access.log
tail -n 20 /app/apache/logs/site194-access.log

8. DNS와 함께 테스트

DNS를 붙일 경우 각 이름을 다른 IP로 매핑한다.

site193.local A 192.168.10.193
site194.local A 192.168.10.194

DNS가 아직 없으면 curl --resolve로 임시 테스트할 수 있다.

curl --resolve site193.local:80:192.168.10.193 http://site193.local/
curl --resolve site194.local:80:192.168.10.194 http://site194.local/

정리

IP 기반 virtual host는 각 사이트마다 별도 IP 주소가 필요하다. 현재는 이름 기반 virtual host가 더 흔하지만, 장비 요구사항이나 레거시 구성이 IP 기반을 요구할 때가 있다. 설정 전에는 서버 NIC에 IP가 실제로 붙어 있는지 확인하고, apachectl -S로 Apache가 어떤 IP:port 조합을 어떤 vhost로 인식하는지 확인해야 한다.

문서 링크

BGM EVER