본문 바로가기

OS/Linux

apache vhost 설정하기

vhost는 virtual host로 웹 서버의 다른 디렉터리로 요청을 라우팅 하여하나의 IP 주소에서 여러 개의 도메인을 처리하는 데 사용합니다.

사용할 수 있는 도메인이 하나이므로 서브도메인을 www, eee로 지정하여 vhost를 구성해 보겠습니다.

 

1) CentOS 7

apache2.4로 소스 설치가 완료된 환경에서 진행하겠습니다.

 

도메인의 DocumetRoot를 생성합니다.

mkdir /usr/local/apache/htdocs2

저는 htdocs2를 만들어 eee.domain.com의 DocumentRoot로 지정하겠습니다.

 

다른 방법으로는 user를 추가하여 /home/www.domain.com과 /home/eee.domain.com으로 구분하여 사용하기도 합니다.

이 또한 서비스 환경에 따라 맞춰 설정해 주시면 됩니다.

 

그리고 index 파일을 수정하여

htdocs의 index.html은 www test

htdocs2의 index.html은 eee test로 저장하여 구분하도록 하겠습니다.

echo "www test" > /usr/local/apache/htdocs/index.html
echo "eee test" > /usr/local/apache/htdocs2/index.html

 

 

다음으로 apache의 설정파일을 수정합니다.

vi /usr/local/apache/conf/httpd.conf

에서 Virtual hosts로 검색하여 주석처리 되어있는 Include 설정을 제거해 줍니다.

vhosts include

 

그리고 해당 디렉터리의 접근 권한을 설정해야 하므로 아래의 코드를 추가합니다.

<Directory "/usr/local/apache/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Directory "/usr/local/apache/htdocs2">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

 

해당 설정을 하지 않으면 페이지를 불러올 권한이 없어 에러메시지가 출력됩니다.

 

vhost 설정 파일 수정

vi /usr/local/apache/conf/extra/httpd-vhosts.conf

 

에서 vhost의 설정을 변경합니다.

<VirtualHost *:80>
    ServerAdmin admin@domain.com
    DocumentRoot "/usr/local/apache/htdocs"
    ServerName www.domain.com
    ErrorLog "logs/www.domain.com-error_log"
    CustomLog "logs/www.domain.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@domain.com
    DocumentRoot "/usr/local/apache/htdocs2"
    ServerName eee.domain.com
    ErrorLog "logs/eee.domain.com-error_log"
    CustomLog "logs/eee.domain.com-access_log" common
</VirtualHost>

ServerAdmin은 서버주의 메일 주소를 입력하면 되고

log는 필요에 따라 커스텀로그를 삽입하여 관리해도 됩니다.

 

이제 DNS에 www와 eee를 A레코드로 생성해 주면 완료입니다!

 

다음은 ubuntu22.04에서 패키지로 설치된 apache2.4로 진행해 보겠습니다.

 

2. ubuntu22.04

패키지로 설치된 apache의 documentroot는 /var/www에 위치합니다

 

저는 여기에 www.domain.com과 eee.domain.com 디렉터리를 생성하여 관리하겠습니다. 

mkdir /var/www/www.domain.com
mkdir /var/www/eee.domain.com

 

이번 테스트에서도 www test와 eee test로 구분하여 진행하겠습니다.

echo "www test" > /var/www/www.domain.com/index.html
echo "eee test" > /var/www/eee.domain.com/index.html

 

이제 vhost의 conf를 설정해야 합니다.

cp vim /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/eee.domain.com.conf

 

000-default는 www의 설정으로 사용해야 vhost의 default서버를 www로 지정할 수 있습니다.

 

centos와 같이 ServerName과 DocumetRoot, log파일 경로 등을 설정합니다.

vi /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
        ServerName www.domain.store
        DocumentRoot /var/www/www.domain.com
        ErrorLog ${APACHE_LOG_DIR}/www-error.log
        CustomLog ${APACHE_LOG_DIR}/www-access.log combined
</VirtualHost>

 

eee의 설정 또한 마찬가지로 알맞게 수정합니다.

 

이제 a2ensite 명령어를 사용하여 eee.domain.com.conf를 사용하여 vhost설정을 완료합니다.

a2ensite eee.domain.com

# 신택스 검사
apache2ctl configtest

 

신택스 검사도 완료하면 apache를 재시작하여 vhost설정을 확인합니다.

apache2ctl -S

apachectl -S

 

이제 www와 eee로 vhost설정이 되었는지 확인하면 됩니다.

 

이상입니다!