Apache - 가상호스트 (VirtualHost)를 통한 여러 사이트 운영

Last Updated on 2월 5, 2021 by 태랑(정현호)

한 서버에서 여러 도메인이나 서브 도메인 별 웹서비스


이전에 작성한 포스팅에서 이어지는 글 입니다.
1. 리눅스에 APM(Apache+PHP+Mysql) 을 통해 웹 서비스 설정
2. 최상위국가 무료 도메인 발급 받기 - freenom 이용


하나의 서버가 여러개의 도메인을 가지고 있거나 1개의 도메인에서 서브 도메인 별로 웹 서비스를 별도로 하고자 하고 싶을때 Apache에서는 VirtualHost를 사용 하게 됩니다.

예를 들어 sub1.abc.com 과 sub2.abc.com 을 하나의 서버에서 다른 웹 서비스를 처리 하거나 a1.com a2.com 과 같이 다른 도메인을 같은 하나의 서버에서 처리 하는 경우에 사용 합니다.

방식은 Virtualhost는 클라이언트의 요청(request)에 포함된 Host의 헤더를 참조하여 "ServerName"과 일치하는 블록을 찾게 되고 일치하는 블록이 발견되면 그 블록의 설정이 적용하게 되는 방식으로 처리가 됩니다.

새로 발급 받은 무료 도메인을 통해 WordPress 를 설치를 하기 전에 Rewrite Rule 과 간섭을 피하기 위하여 phpmyadmin 서비스를 서브 도메인으로 사용 하도록 Virtualhost 를 설정하도록 하겠습니다.



VirtutalHost(가상호스트) 생성

이전에 freedom.com 을 통해서 무료 도메인을 발급 받았습니다.
무료로 발급 받은 도메인을 통해 가상호스트를 설정해보도록 하겠습니다.
가상 호스트나 도메인이 필요한 업무 등에서 가볍게 사용해 볼 수 있는 서비스 입니다.



## conf 파일 생성 및 설정
vi /etc/httpd/conf.d/vhost.conf
   -> 파일이 없다면 내용을 기록하면서 생성

<VirtualHost *:80>
ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/wordpress"
ServerName h2code.cf
ServerAlias h2code.cf www.h2code.cf
ErrorLog "logs/h2code.cf-error_log"
CustomLog "logs/h2code.cf-access_log" combined
#ErrorDocument 403 /403.html
#ErrorDocument 404 /404.html
#ErrorDocument 503 /503.html

<Directory "/var/www/html/wordpress">
AllowOverride ALL
Options MultiViews FollowSymLinks
DirectoryIndex index.php index.jsp index.html index.htm
<RequireAll>
Require all granted
#Require not ip 123.123.123.123
#Require not host *.aaaa.com
</RequireAll>
</Directory>
</VirtualHost>


<VirtualHost *:80>
ServerAdmin admin@h2code.cf
DocumentRoot "/var/www/html/myadmin"
ServerName myadmin.h2code.cf
ServerAlias myadmin.h2code.cf
ErrorLog "logs/myadmin.h2code.cf-error_log"
CustomLog "logs/myadmin.h2code.cf-access_log" combined
#ErrorDocument 403 /403.html
#ErrorDocument 404 /404.html
#ErrorDocument 503 /503.html

<Directory "/var/www/html/myadmin">
AllowOverride ALL
Options MultiViews FollowSymLinks
DirectoryIndex index.php index.jsp index.html index.htm
<RequireAll>
Require all granted
#Require not ip 123.123.123.123
#Require not host *.aaaa.com
</RequireAll>
</Directory>
</VirtualHost>



설정 내역 설명


위에서 설정한 내용을 간략하게 살펴 보면 서버네임 h2code.cf 과 myadmin.h2code.cf  2개를 설정 하였습니다.

NamedVirtualHost *:80

=> 80포트로 들어오는 모든 IP주소에 대해 가상호스트 서비스를 처리한다는 의미 입니다.
=> *:80 이나 서버의 아이피를 직접 지정 하여 사용 합니다(123.123.123.123:80)
=> 80포트 외에 SSL서비스인 경우 *:443 과 같은 형태로 사용 합니다.

DocumentRoot : 실제 소스파일이 있는 파일시스템 내 경로를 지정해주면 됩니다.

ServerName : 서비스할 도메인명

ServerAlias : 웹서비스가 여러개의 도메인을 사용할 경우 지정해주며 여러개 지정 가능 합니다.
=> aaa.com www.aaa.com java.aaa.com *.aaa.com

위에서 설정한 내역으로 보면 h2code.cf 와 www.h2code.cf 는 같은 virtualhost 내에서 처리가 되게 됩니다.


ErrorLog : Virtualhost 별로 errorLog 를 기록 할 수 있습니다.
경로명과 이름을 같이 기재 하면 됩니다(/경로/서버이름-error_log)

CustomLog : 접속한 Host들의 정보를 기록하는 파일로 access 로그 파일과 동일 합니다.
Log 파일 경로 옆에 있는 기록할 Log 파일의 포멧을 지정하게 되고 Log 파일의 포멧에는 common, referer, agent, combined 등이 있으며 
별도로 생성한 포맷을 사용 할수 있습니다.

agent, referer 정보를 모두 저장하기 위해서 combined를 사용 해야 합니다.

<Directory> </Directory> 에는 위에서 지정한 DocumentRoot 에 대한 권한이나 Option 등을 지정 합니다.
AllowOverride 지시자는 어떻게 접근을 허락할 것 인가에 대한 설정 입니다.

MultiViews 는 웹브라우저의 요청에 따라 적절한 페이지로 보여주는 설정 입니다.


추가적으로 도메인이 아닌 IP로 직접 접속을 하게 되면 vhost 설정의 처음에 해당하는 호스트로 접속하게 됩니다.

설정이 완료 되었다면 Apache를 재시작을 합니다.
[root]# systemctl restart httpd



이전 포스트에서 freenom DNS 에서 서브도메인(3차)(myadmin)레코드를 추가 하였습니다.
추가한 서브 도메인을 사용하여 구성한 virtualhost 가 정상적으로 동작하여 접속되는걸 확인 할 수 있습니다.




그리고 아직 웹 페이지 구성이 되지 않은 기본 도메인 페이지는 Apache 기본 페이지로 표시되는걸 확인 할수 있습니다.




이어지는 글
설치형 워드프레스를 통한 개인 블로그, 사이트 구축 - WordPress 설치



관련된 글
무료 클라우드 서비스를 사용한 웹서비스 구축 - 오라클 클라우드 프리티어

 

“Apache - 가상호스트 (VirtualHost)를 통한 여러 사이트 운영” 에 대한 2 댓글

  1. 핑백: 워드프레스 - 설치형 블로그 및 개인 사이트 구축 | | 작은 공간,하지만 꿈이있는

  2. 핑백: PHP OpCacheGUI 설치 - OpCache 관리 및 모니터링 | | 작은 공간,하지만 꿈이있는

답글 남기기