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

Share

Last Updated on 1월 4, 2024 by Jade(정현호)

 

Virtualhost

Virtualhost 는 한 서버에서 여러 도메인이나 서브 도메인 별 웹서비스를 제공하는 Apache 웹서버의 기능입니다.

아래 포스팅에서 이어지는 글입니다.
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 를 설정하도록 하겠습니다.


Virtualhost(가상호스트) 생성

이전에 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 재시작

설정이 완료되었다면 Apache를 재시작을 합니다.

[root]# systemctl restart httpd


이전 포스트에서 freenom DNS 에서 서브도메인(3차)(myadmin)레코드를 추가하였습니다.

추가한 서브 도메인을 사용하여 구성한 virtualhost 가 정상적으로 동작하여 접속되는 걸 확인할 수 있습니다.




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





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



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

 

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x