본문 바로가기
System/Server

웹 서버 IP기반 VirtualHost 설정 (Linux)

by 슬픈 야옹이 2023. 2. 28.

지난 포스트에 이어 웹 서버에 IP기반 VirtualHost를 설정해본다.

 

VitrualHost란 한 대의 서버에 여러 웹 서비스를 호스팅하는 기법을 말한다.

 

IP기반 VirtualHost는 이를 IP기반으로 구현하는 것으로,

한 대의 서버에 여러 IP를 부여(IP aliases)하고 각 IP에 서로 다른 웹 서비스를 호스팅하는 기법이다.

 

 

서버 환경은 다음과 같이 구성한다.

웹 서버
IP주소 : 192.168.10.172/24
도메인 : www.st07.sec

IP주소 : 192.168.10.173/24
도메인 : www.st07.itc


네임 서버
IP 주소 : 192.168.10.171/24

 

모든 실습은 VMware에서 진행하였다.

 

IP기반 VirtualHost 설정은 다음 순서로 진행한다.

 

1. 서버에 IP주소를 추가한다.

2. 웹 서버 홈 디렉터리를 생성한다.

3. 서버 설정을 변경한다.

4. 네임 서버 설정을 변경한다.

 

 

 

1. 서버에 IP주소를 추가한다.

네트워크 스크립트 파일을 새로 생성하는 방식으로 추가한다.

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-[NIC명] ifcfg-[NIC명]:0
# vi ifcfg-[NIC명]:0

복사한 스크립트 파일의 디바이스명과 IP주소를 변경한다.

네트워크를 재시작하고 확인한다.

# systemctl restart network
# ifconfig

 

 

2. 웹 서버 홈 디렉터리를 생성한다.

이전에 생성한 html 디렉터리는 사용하지 않는다.

삭제하거나 내버려 두어도 무방하다.

# mkdir -p /home/httpd/sec
# mkdir -p /home/httpd/itc

 

 

 

 

3. 서버 설정을 변경한다.

서버 설정 파일(httpd.conf) 편집

# vi /app/apache/conf/httpd.conf

 

전역 DocumentRoot "/home/httpd/"로 수정

 

설정파일의 기존 <Directory "/home/httpd/html"> ... </Directory> 부분

<Directory "/home/httpd/"> ... </Directory>로 수정

아래 내용 추가

파일 내 위치는 상관없으나 적절히 보기 좋은 곳에 작성해야 유지보수에 용이하다.

<Directory "/home/httpd/sec">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

<Directory "/home/httpd/itc">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

 

설정 파일에 다음 VirtualHost 설정 추가

<VirtualHost 192.168.10.172:80>
    DocumentRoot /home/httpd/sec
    ServerName 192.168.10.172
</VirtualHost>

<VirtualHost 192.168.10.173:80>
    DocumentRoot /home/httpd/itc
    ServerName 192.168.10.173
</VirtualHost>

 

서버 설정을 변경했으므로 Apache 서버를 재시작한다.

# /app/apache/bin/apachectl restart

 

 

4. 네임서버 설정을 변경한다.

구축한 웹 서버 도메인에 대한 정보를 x.171번 네임서버에 설정한다.

x.171번 서버에 접속하여 DNS 설정 파일을 편집한다.

# vi /etc/named.conf

 

named.conf 내용

options {
        directory "/var/named";
};

zone "." {
        type hint;
        file "named.ca";
};

zone "st07.sec" {
        type master;
        file "st07.sec.zone";
};

zone "st07.itc" {
        type master;
        file "st07.itc.zone";
};

 

 

zone 파일을 편집한다.

# vi /var/named/st07.sec.zone

st07.itc.zone 파일 내용

$TTL    1D
@    IN    SOA    ns.st07.itc.    root.ns.st07.itc. (
            1         ; Serial
            1D        ; Refresh
            1H        ; Retry
            1W        ; Expire
            3H )      ; Minimum
; Name Server
       IN    NS    ns.st07.itc.
; Host address
       IN    A    192.168.10.171
ns     IN    A    192.168.10.171
www    IN    A    192.168.10.172

 

 

 

# vi /var/named/st07.itc.zone

st07.itc.zone 파일 내용

$TTL    1D
@    IN    SOA    ns.st07.itc.    root.ns.st07.itc. (
            1         ; Serial
            1D        ; Refresh
            1H        ; Retry
            1W        ; Expire
            3H )      ; Minimum
; Name Server
       IN    NS    ns.st07.itc.
; Host address
       IN    A    192.168.10.171
ns     IN    A    192.168.10.171
www    IN    A    192.168.10.173

 

DNS 서비스를 재시작한다.

# systemctl restart named

 

 

 

테스트

웹 서버 홈 디렉터리에 웹 페이지를 업로드하고 브라우저로 테스트한다.

 

# cd /home/httpd/sec
# echo welcome to www.st07.sec! > index.html
# chmod o+x index.html

 

# cd /home/httpd/itc
# echo welcome to www.st07.itc! > index.html
# chmod o+x index.html