서버 운영/APM 서버 구축

[Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

씨실과 날실 2020. 11. 10. 09:00

 

[관련 게시물]

2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

2020/11/12 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버]자체서명 SSL/TLS 인증서를 이용한 https:// 프로토콜 연결 구축

2020/11/14 - [서버 운영/APM 서버 구축] - http:// 연결을 https:// 연결로 자동 리디렉션(Redirection)

 

 


 

 

Ubuntu 20.04 LTS에서 APM 설치

2020/09/14 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 아파치(Apache2 설치

2020/09/16 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.3 설치

2020/09/18 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.5 설치

2020/09/20 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - PHP 7.4 설치

2020/09/22 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - APM 설치 후 방화벽 설정

2020/09/24 - [서버 운영/APM 서버 구축] - MariaDB 10.4 이후의 계정 인증 관련 변화(unix_socket, mysql_native_password 인증 / 계정, 암호 및 전역 권한 정보 저장 테이블 변경 등)

2020/09/26 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - apache2.conf 기본 설정

2020/09/28 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - php.ini 기본 설정

 

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

2020/10/07 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - PHP 7.4 - php.ini

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 내 지시어 설명

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명


Ubuntu 20.04에서 phpMyAdmin 설치 및 설정

2021.02.20 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 01 - 저장소 설치

2021.03.15 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 02 - Apache 서버 관리자를 위한수동 설치(버전 5.1.0 기준)

2021.03.17 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 03 - 보안강화 작업

2021.03.19 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 04 - 웹호스팅 사용자를 위한 수동 설치(버전 5.1.0 기준)

2021.03.21 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 05 - setup 페이지를 통한 구성 파일 생성

Ubuntu 18.04 LTS에서 APM 설치

2018/11/09 - [서버 운영/APM 서버 구축] - Apache 서버 설치

2018/11/14 - [서버 운영/APM 서버 구축] - MariaDB 설치

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 1

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 2 - ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 3

2018/11/19 - [서버 운영/APM 서버 구축] - PHP7 설치

2018/11/21 - [서버 운영/APM 서버 구축] - 서버 환경 파일 수정 - php.ini, apache2.conf

 

Ubuntu 18.04 LTS에서 MariaDB 백업 및 업그레이드

2019/01/15 - [서버 운영/APM 서버 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

2019/06/27 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 (Upgrading from MariaDB 10.3 to MariaDB 10.4)

 

Ubuntu 18.04 LTS에서 PHP 버전 전환

2019/07/05 - [서버 운영/APM 서버 구축] - Apache와 Shell에서 PHP 버전 전환하기(How to Switch between Multiple PHP Version)

 

Ubuntu 18.04 LTS에서 phpmyadmin 설치 및 운용

2018/11/23 - [서버 운영/APM 서버 구축] - phpmyadmin 설치 - APT 패키지 관리자를 통한 설치

2019/06/18 - [서버 운영/APM 서버 구축] - APT 패키지 관리자를 통해 설치한 phpMyAdmin 업그레이드 방법(업그레이드 버전 4.9.0.1)

2019/07/01 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 01 - 일반 설치

2019/07/03 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 02 - 심볼릭 링크를 이용한 보안 접속

2019/06/16 - [서버 운영/APM 서버 구축] - phpMyAdmin 4.6.6deb5와 PHP 7.2 간 호환성 문제 해결 - Warning in ./libraries/sql.lib.php#613

 

XAMPP 설치 및 운용

2019/04/20 - [서버 운영/서버 구축 꾸러미] - XAMPP에 대하여(버전 7.1.28 / 7.2.17 / 7.3.4)

2019/04/22 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 7.3.4 인스톨러 설치

2019/04/25 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 설정

2019/06/03 - [서버 운영/서버 구축 꾸러미] - XAMPP 포터블(portable) 사용법

2019/06/05 - [서버 운영/서버 구축 꾸러미] - XAMPP for Linux 4.3.5 설치 및 사용법

 

서버 운영을 위한 관련 연재글

2018/11/07 - [리눅스/Ubuntu] - 방화벽 설정 - ufw

2018/11/12 - [서버 운영/버추얼박스(VirtualBox)] - 가상머신(Virtualbox) 내 서버 외부접속

2019/01/05 - [미디어위키/미디어위키 설치 및 관리] - 호스트 컴퓨터에서 가상머신 내 미디어위키 접속 및 작업을 위한 버추얼박스 포트포워딩 설정

2019/03/15 - [서버 운영/APM 서버 구축] - PHP 7.3으로의 업그레이드 및 사용 연기 권장 안내 - PHP Notice: compact(): Undefined variable:

 

가상호스트(Virtual Host)에 대하여

가상호스트(Virtual Host)는 단일 서버에서 여러 웹사이트를 서비스하기 위한 서버 구성을 뜻합니다.

가상호스트에는 각 웹사이트마다 다른 IP 주소를 사용하는 IP기반 (IP-based) 방식과 한 IP 주소에 여러 이름을 가지는 이름 기반 (name-based) 방식이 있습니다. 특히 이름 기반 가상 호스트는 호스트기반 (host-based) 또는 비IP 가상호스트(non-IP virtual hosts)라고도 부릅니다.

Apache HTTP Server Version 2.4 가상호스트 문서

한글 버역본 : https://httpd.apache.org/docs/2.4/vhosts/

최신 영어 원문 : https://httpd.apache.org/docs/2.4/en/vhosts/

 


 

이름 기반 가상호스트 : https://httpd.apache.org/docs/2.4/vhosts/name-based.html

IP 기반 가상호스트 : https://httpd.apache.org/docs/2.4/vhosts/ip-based.html

일반적인 가상호스트 구성의 예 ; https://httpd.apache.org/docs/2.4/vhosts/examples.html

 

이름 기반 가상호스트

이름 기반 가상호스트는 각 호스트 이름을 올바른 IP 주소에 연결되도록 DNS 서버를 구성한 다음 서로 다른 호스트 이름을 인식하도록 Apache HTTP 서버를 구성하면 되므로 다른 가상호스트 구성 방식보다 손쉽게 구축할 수 있습니다. 뿐만 아니라 IP 주소에 대한 수요를 줄임으로써 IP 주소를 확보하기 위한 노력과 자원 역시 절약할 수 있습니다.

따라서 반드시 IP 주소 기반 가상호스트를 구축해야만 하는 불가피한 경우가 아닌 이상에서야 대부분 이름 기반 가상호스트를 구축합니다.

 

안내

본 글에서는 Ubuntu 20.04에서 저장소를 통해 설치한 Apach2 HTTP 서버를 기반으로 삼아 이름 기반 가상호스트를 구축하는 방법에 대해 다룹니다.

IP 기반 가상호스트 구축은 Apache HTTP Server Version 2.4 가상호스트 문서 등을 참고하시기 바라며, CentOS 등 레드햇 계열 리눅스 서버에서 아파치 가상호스트 구축 방법은 다른 유능한 블로거분들의 글들을 참고하시기 바랍니다.

 

가상호스트 구축을 위한 전제조건

실제로 웹서버에서 가상호스트를 구축하기 위해서는 DNS 서버를 구축하여 IP 주소와 도메인을 연결해주어야 합니다. 그러나 이 글은 DNS 서버를 구축하는 것이 주 목적은 아니므로 생략하도록 하겠습니다.

로컬 서버에서 아주 간단하게 가상호스트 작동 여부를 확인할 수 있는 방법이 있습니다. 바로 hosts 파일을 조작하는 것입니다. 이 방법은 아래에서 후술하도록 하겠습니다.

 


 

가상호스트(Virtual Host) 구축

구축 환경

OS : Ubuntu 20.04 LTS Focal Fossa

Web Server : Server version: Apache/2.4.41 (Ubuntu)

가상호스트 환경

도메인 : virtualhost01.net

 

기본 웹문서 Root 디렉터리 확인

 

study@study-VirtualBox:~$ study@study-VirtualBox:~$ ls /var/www/html/
index.html  phpinfo.php

우분투 18.04 LTS 를 포함하여 그 이후에 출시된 버전의 우분투는 저장소를 통해 Apache2를 설치하는 경우 웹문서 Root 디렉터리가 다음과 같습니다.

/var/www/html/

Apache2 서버 설정 파일에서 Root 디렉터리가 기본값으로 /var/www/로 설정되어 있는 경우가 있습니다. 우분투에서 Apache 웹서버를 구동하는 경우 위 경로로 수정해주어야 합니다.

위의 ls 명령을 통해 반환된, /var/www/html/ 디렉터리 안에 있는 index.html, phpinfo.php 파일은 각기 다음과 같은 역할을 합니다.

index.html : 도메인 주소로 접속 시 보이는 홈페이지(= 대문) 웹문서

phpinfo.php : 웹 접속을 통해 서버의 PHP 설정을 확인할 수 있는 코드가 담긴 문서

 

index.html 파일은 홈페이지 문서임을 지정하는 고정된 파일명입니다.

Apache2 서버를 설치하는 경우 일반적으로 Apache 서버에 대한 기본 설명이 담긴 문서가 index 파일로 구성되어 있으므로 자신의 웹사이트에 맞게 내용을 반드시 교체해주어야 합니다.

phpinfo.php 파일명은 확장자명만 php로 유지한 채 어떤 이름으로 지정해도 무방합니다.

 

 

2020/09/14 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 아파치(Apache2 설치

2020/09/20 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - PHP 7.4 설치

index.html, phpinfo.php 두 파일에 대한 자세한 설명은 위 링크를 참고하시기 바랍니다.

 

가상호스트 웹문서 Root 디렉터리 생성

 

study@study-VirtualBox:~$ sudo mkdir -pv /var/www/html/virtualhost01.net
[sudo] study의 암호: 
mkdir: '/var/www/html/virtualhost01.net' 디렉터리를 생성함
study@study-VirtualBox:~$ 
가상호스트를 운용하기 위해서는 가상호스트용 Root 웹문서 디렉터리를 생성해주어야 합니다.

일반적으로 해당 가상호스트와 연동되는 도메인 주소를 디렉터리명으로 지정합니다.

virtualhost01.net

여기서는 위 도메인명을 예시로 사용하였습니다. 자신이 사용할 도메인명으로 수정해주시면 됩니다. 이후 위 도메인 주소가 사용된 자리를 마찬가지로 자신이 사용하고자 하는 도메인명으로 수정해주시면 됩니다.

 

가상호스트 웹문서 Root 디렉터리 퍼미션 설정

study@study-VirtualBox:~$ sudo chmod 775 -R /var/www/html/virtualhost01.net

보안을 위해 가상호스트 웹문서 Root 디렉터리의 퍼미션을 위와 같이 설정해줍니다.

 

index.html 파일 생성

 

study@study-VirtualBox:~$ sudo nano /var/www/html/virtualhost01.net/index.html
이제 가상호스트 웹사이트에서 사용될 index.html 문서를 작성해줍니다.

위 명령은 Text 문서 편집기 중 vi와 함께 기본 편집기로 포함되어 있는 nano 편집기를 실행하여 해당 파일을 생성, 편집할 때 사용합니다.

nano는 vi를 다루기 힘들어 하는 초심자들도 TUI(터미널 유저 안터페이스)에서 문서를 쉽게 편집할 수 있도록 고안된 문서 편집기입니다.

 

 

<html>
  <head>
    <title>http://virtualhost01.net</title>
  </head>
  <body>
    <h1>Welcome to virtualhost01.net!</h1>
    <p>virtual host is working fine.</p>
  </body>
</html>

위 구문은 가장 단순한 구조로 index.html을 작성한 예입니다. HTML5, CSS3 등을 이용해 보다 복잡한 구조의 웹문서를 작성할 수 있습니다.

 

$ sudo nano /var/www/html/virtualhost01.net/index.html

터미널에서 위 명령을 입력하면 아래와 같이 터미널이 nano 편집기 화면으로 전환되면서 문서를 작성할 수 있습니다.

 

문서 내용을 다 작성한 후 나가기 명령으로 예약된 키 조합을 눌러주시면 됩니다. 하단을 보면 기본 명령 키 조합이 친절하게 표시되어 있습니다.

키 조합에서 ^ 표시는 Ctrl 키를 의미합니다. 즉 파일을 나가려면 Ctrl+X키를 눌러주시면 됩니다.

 

나가기(Ctrl+X)를 누르면 위 그림과 같이 수정한 버퍼를 내용하시겠습니까? 라고 묻습니다. 이때 y를 눌러줍니다.

버퍼(buffer)

버퍼(buffer)란 단순히 설명하면 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역을 일컫습니다.

즉 우리가 어떠한 문서를 편집한다고 가정하면 우리의 편집 내용이 수정될 때마다 즉시 해당 파일에 적용되는 것이 아니라 편집 내용이 휘발성이 강한 임시 저장 장치인 메모리에 임시로 저장되어 그곳에서 편집 작업이 이루어 졌다가 우리가 저장 작업을 수행하고 나서야 비로소 편집 대상이 되는 원본 파일에 해당 편집 내용이 덮어쓰기됩니다.

이때 임시로 작업이 이루어진 기억 장치(메모리) 영역을 버퍼라고 합니다.

 

저장할 파일 이름을 지정하는 항목이 나타나는데 우리는 nano 편집기를 실행할 때 생성할 파일명과 경로를 미리 지정했으므로 해당 내용이 자동으로 기록됩니다. 따라서 그냥 엔터키를 눌러주시면됩니다. 그러면 해당 파일이 정상적으로 생성되고 다시 터미널 화면으로 돌아오게 됩니다.

 

웹사이트 Apache 서버 설정 생성

 

study@study-VirtualBox:~$ sudo nano /etc/apache2/sites-available/virtualhost01.net.conf

이제 가상호스트에 적용할 전용 서버 설정 파일을 생성해주어야 합니다.

/etc/apache2/sites-available/

가상호스트 전용 Apache 서버 설정 파일은 위 디렉터리에 위치시키며 각 가상호스트 전용 섭 설정 파일 명은 일반적으로 아래와 같이 지정합니다.

도메인명.conf

virtualhost01.net.conf

 

<VirtualHost *:80>
    # ServerAdmin webmaster@virtualhost01.net
    ServerName www.virtualhost01.net
    ServerAlias virtualhost01.net
    DocumentRoot /var/www/html/virtualhost01.net
    DirectoryIndex index.html
    ErrorLog $/virtualhost01.net_error.log
    CustomLog $/virtualhost01.net_access.log combined
</VirtualHost>

<Directory /var/www/html/virtualhost01.net>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

위 구문은 가상호스트별 적용되는 가장 기본적인 설정의 예시입니다.

 

 

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

 


 

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명

위 파일에 사용된 Apache 지시어에 대한 보다 자세한 설명은 위 링크를 참고하시기 바랍니다.

 

가상호스트 설정 활성화

 

study@study-VirtualBox:~$ sudo a2ensite virtualhost01.net.conf
Enabling site virtualhost01.net.
To activate the new configuration, you need to run:
  systemctl reload apache2
study@study-VirtualBox:~$ 

이제 위와 같이 새로 작성한 가상호스트용 설정 파일을 a2ensite 명령을 이용해 활성화해주어야 합니다. 그러나 a2ensite 명령을 실행한다고 해서 해당 설정이 바로 적용되는 것은 아닙니다. 적용하기 위해서는 Apache 서버가 설정 파일을 다시 한 번 읽어들이도록 해주어야 합니다.

 

Apache2 구문 검사

 

study@study-VirtualBox:~$ sudo apache2ctl configtest
Syntax OK
study@study-VirtualBox:~$ 

Apache2 서버의 설정 파일을 수정하거나 새로 생성하여 새로 적용하기 전에 구문 검사를 해주어 아파치 구문에 오류가 없는지 확인해줍니다. 만약 오류가 있다면 아파치 서버가 구동되지 않을 수도 있습니다.

Syntax OK

apache2ctl configtest 명령을 실행하여 위와 같이 구문 검사에 통과해야 아파치 서버가 정상적으로 구동됩니다. 이 문구를 확인하고 서버 설정을 재로드해주시면 됩니다.

 

 

ServerName 지시어 구문 미지정 시 출력되는 오류

ServerName 지시어가 지정되어 있지 않은 경우 아래와 같은 문구가 출력됩니다.

 

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

 

이 문구가 출력되더라도 서버 구동에 큰 문제는 없지만 서버 운영에 있어 그다지 좋은 일이 아닙니다. 따라서 ServerName을 명확히 지정해주는 것이 좋습니다.

 

 

Apache2 서버 설정 재로드

 

study@study-VirtualBox:~$ sudo systemctl reload apache2

아파치 설정 파일을 생성 또는 수정하고 구문 검사까지 통과한 후 아파치 설정 재로드를 해주시면 새로운 설정이 적용됩니다.

 

hosts 파일 수정

이제 가상호스트 웹사이트에 접속해 정상적으로 보이는 테스트해볼 차례입니다. 그런데 정작 테스트해보니 정상적으로 보이지 않습니다.

이는 로컬 서버에서 테스트했기 때문입니다. 실제 서버에서는 도메인 네임 서버(DNS) 설정 등 몇 가지 설정을 더 해주어야 하지만 여기서는 서버가 어떻게 구축되는가 개략적인 설명을 위해 로컬 서버를 구성한 것이므로 복잡한 DNS 서버 설정을 대신하여 hosts 파일을 수정해 동일한 효과를 내도록 작업해보도록 하겠습니다.

 

hosts 파일

hosts 파일은 Windows, Linux 등 운영체제(OS)가 DNS보다 호스트 이름을 IP 주소로 해석하는 일반 텍스트 파일입니다.

즉 예를 들어 이 hosts 파일에 naver.com이 127.0.0.1로 설정되어 있다면 웹브라우저로 naver.com에 접속하더라도 실제 네이버 웹사이트가 아니라 로컬호스트로 연결됩니다.

이런 기능 때문에 악성코드들 중에는 hosts 파일을 변조하여 정상적인 도메인 주소를 입력하더라도 피싱 사이트로 연결되게끔 만드는 것들이 있습니다.

https://ko.wikipedia.org/wiki/Hosts

보다 자세한 설명은 위 링크를 참고하시깊 바랍니다.

 

study@study-VirtualBox:~$ sudo nano /etc/hosts

우분투 등 대부분의 리눅스 배포판의 경우 hosts 파일은 /etc 디렉터리에 위치합니다.

 

 

127.0.0.1       localhost
127.0.1.1       study-VirtualBox

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

위는 수정되기 전 hosts 파일의 내용 예시입니다.

 

127.0.2.1       virtualhost01.net

hosts 파일에 위와 같이 IP 주소와 도메인 주소를 추가해주고 저장해줍니다. 그리고 나서 다시금 웹브라우저로 가상호스트 도메인 주소를 접속해봅니다.

위 그림과 같이 정상적으로 접속되는 것을 확인할 수 있습니다.