웹 서버 구축은 오늘날 모든 웹 애플리케이션의 기초가 되는 중요한 과정입니다. 이 글에서는 웹 서버를 구성하고, 가상 호스트 설정을 통해 다중 도메인을 관리하는 방법에 대해 자세히 알아보겠습니다. 또한, 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.com과 example2.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>
위의 설정 파일에서 ServerName
과 ServerAlias
는 웹사이트의 주 도메인과 서브 도메인을 정의합니다. 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.com과 example2.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의 설정 예제를 통해 각각의 특징을 이해하는 데 도움이 되셨길 바랍니다. 웹 서버 운영은 처음에는 복잡하게 느껴질 수 있지만, 차츰 익숙해지면 다양한 웹 사이트를 통합 관리하는 데 큰 도움이 됩니다.