웹 서버 구성, 가상 호스트 설정으로 다중 도메인 관리하기

웹 서버 구축은 오늘날 모든 웹 애플리케이션의 기초가 되는 중요한 과정입니다. 이 글에서는 웹 서버를 구성하고, 가상 호스트 설정을 통해 다중 도메인을 관리하는 방법에 대해 자세히 알아보겠습니다. 또한, Apache와 Nginx 두 가지 주요 웹 서버에 대한 설정 예제를 제공하겠습니다.

1. 웹 서버란?

웹 서버는 클라이언트가 요청한 웹 페이지를 제공하는 소프트웨어나 하드웨어를 의미합니다. 사용자가 웹 브라우저를 통해 URL을 입력하면, 웹 서버가 해당 URL에 대한 요청을 처리하여 결과를 반환합니다.

1.1 웹 서버의 주요 기능

  • HTTP 요청 처리
  • 정적 파일 제공 (HTML, CSS, JS, 이미지 등)
  • 동적 콘텐츠 생성 (PHP, Python, Ruby 등)
  • 보안 관리 (SSL/TLS 지원)
  • 가상 호스팅 지원

2. 가상 호스트란?

가상 호스트는 하나의 물리적인 서버에서 여러 개의 도메인이나 사이트를 운영할 수 있도록 해주는 기능입니다. 이를 통해 관리자는 여러 웹사이트를 효율적으로 운영할 수 있습니다.

2.1 가상 호스트의 종류

  • 명시적 가상 호스트 (Explicit Virtual Host): 특정 도메인 이름에 따라 요청을 분류합니다.
  • 암시적 가상 호스트 (Implicit Virtual Host): IP 주소에 따라 요청을 처리합니다. 모든 요청이 같은 문서 루트를 공유합니다.

3. Apache 웹 서버 설정

Apache는 오픈 소스 웹 서버 소프트웨어로, 가장 널리 사용되는 서버 중 하나입니다. Apache에서 가상 호스트를 설정하는 방법을 알아보겠습니다.

3.1 Apache 설치

대부분의 리눅스 배포판에서 Apache를 설치하는 방법은 다음과 같습니다:

sudo apt update
sudo apt install apache2

3.2 Apache 가상 호스트 설정

Apache의 가상 호스트 설정은 주로 /etc/apache2/sites-available/ 디렉터리에서 관리됩니다. 가상 호스트 설정 파일을 만들어 보겠습니다.

예제: 두 개의 도메인 관리하기

가정해 보겠습니다. example1.comexample2.com이라는 두 개의 도메인을 운영하고 있다고 가정해보겠습니다.

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

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

위의 설정 파일에서 ServerNameServerAlias는 웹사이트의 주 도메인과 서브 도메인을 정의합니다. DocumentRoot는 해당 도메인이 제공할 파일의 위치를 명시합니다.

설정 파일을 저장한 후에는 다음 명령어를 통해 가상 호스트를 활성화할 수 있습니다.

sudo a2ensite example1.conf
sudo a2ensite example2.conf
sudo systemctl reload apache2

4. Nginx 웹 서버 설정

Nginx는 경량화된 웹 서버로, 높은 성능과 안정성을 제공합니다. Nginx에서도 가상 호스트 설정을 진행해 보겠습니다.

4.1 Nginx 설치

Nginx 역시 대부분의 리눅스 배포판에서 쉽게 설치할 수 있습니다.

sudo apt update
sudo apt install nginx

4.2 Nginx 가상 호스트 설정

Nginx의 가상 호스트 설정은 /etc/nginx/sites-available/에서 이루어집니다. 다음과 같이 가상 호스트를 설정할 수 있습니다.

예제: 두 개의 도메인 관리하기

아래와 같이 example1.comexample2.com의 가상 호스트 설정 파일을 작성할 수 있습니다.

server {
    listen 80;
    server_name example1.com www.example1.com;

    root /var/www/example1;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name example2.com www.example2.com;

    root /var/www/example2;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

설정 파일을 저장한 후에는 다음 명령어를 실행하여 Nginx를 재시작할 수 있습니다.

sudo systemctl restart nginx

5. DNS 설정

가상 호스트 설정이 완료되면 도메인 이름에 대한 DNS 설정을 해야 합니다. 각 도메인에 대해 A 레코드를 설정하고 공인 IP 주소를 연결해야 합니다. DNS 설정은 도메인을 등록한 호스팅 서비스에서 관리할 수 있습니다.

6. SSL 인증서와 HTTPS 설정

보안을 강화하기 위해 SSL 인증서를 설치하여 HTTPS 프로토콜을 사용할 수도 있습니다. Let’s Encrypt를 이용하면 무료로 SSL 인증서를 발급받을 수 있습니다.

리눅스에서 Let’s Encrypt SSL 인증서 설치

sudo apt-get install certbot python3-certbot-apache

그런 다음, 아래 명령어로 SSL 인증서를 발급받습니다.

sudo certbot --apache

Nginx의 경우 아래 명령어를 사용합니다.

sudo apt-get install python3-certbot-nginx
sudo certbot --nginx

7. 모니터링 및 유지보수

웹 서버를 운영하는 데 있어 모니터링과 유지보수는 매우 중요합니다. 서버의 성능, 로그 파일, 보안 취약점 등을 주기적으로 점검할 필요가 있습니다.

7.1 로그 파일 확인

Apache의 로그 파일은 주로 /var/log/apache2/에 위치하며, Nginx의 로그 파일은 /var/log/nginx/에 위치합니다. 각 로그 파일을 통해 접속 기록이나 오류 상황을 확인할 수 있습니다.

결론

이번 포스트에서는 웹 서버의 개념부터 시작하여 가상 호스트 설정을 통해 여러 도메인을 관리하는 방법에 대해 알아보았습니다. 또한 Apache와 Nginx의 설정 예제를 통해 각각의 특징을 이해하는 데 도움이 되셨길 바랍니다. 웹 서버 운영은 처음에는 복잡하게 느껴질 수 있지만, 차츰 익숙해지면 다양한 웹 사이트를 통합 관리하는 데 큰 도움이 됩니다.