리눅스 서버 구축

리눅스 서버 구축 실습 - 5편 - Virtual Host 설정과 SSL 인증서 적용 프로젝트

ahhyun98 2025. 5. 23. 14:46

이전 글 보러 가기

이전까지는 Apache, PHP, phpMyAdmin 환경을 구성하고 보안 설정을 마쳤다.

이번 마지막 실습에서는 실제 서비스 운영을 염두에 둔 가상 호스트 설정, Let's Encrypt 인증서 적용, 그리고 최고 관리자 설정까지 수행하였다. 말 그대로 지금까지 학습한 리눅스 서버 구축 내용을 종합적으로 적용한 실습 프로젝트이다. 


1. Apache 동시 접속자 수 설정하기

Apache동시 접속자를 처리하기 위해 여러 멀티 프로세싱 모델 (MPM) 중 하나를 사용한다. 

본 실습에서는 prefork 모드를 사용하였다. 

 

MPM 확인하기

a2query -M

 

설정 조건

  • StartServers와 MinSquareServers는 같은 값 설정
  • MaxSpareServers는 위의 2배
  • ServerLimit은 기본값 256 => 300으로 확장 설정

 

이 설정을 통해 웹 서버의 처리 성능을 조정하고, 높은 트래픽에서도 안정적으로 대응할 수 있도록 구성하였다. 


2. Virtual Host 설정하기 (도메인 구성)

nip.io의 서브 도메인을 활용해 실습을 진행했다. 

 

설정 파일 위치

/etc/apache2/sites-available/iamahhyun.ip주소.nip.io.conf

 

설정 예시

<VirtualHost *:80>
    ServerName iamahhyun.ip 주소.nip.io
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

 

<VirtualHost *:443>
    ServerName iamahhyun.ip 주소.nip.io
    DocumentRoot /home/iamahhyun/www

    <Directory /home/iamahhyun/www>
        AllowOverride All
        require all granted
        php_value upload_max_filesize 10M
        php_value post_max_size 10M
        php_value session.cookie_httponly 1
        php_value session.use_strict_mode 1
    </Directory>

    AssignUserID iamahhyun iamahhyun
    ErrorLog ${APACHE_LOG_DIR}/iamahhyun-error.log
    CustomLog ${APACHE_LOG_DIR}/iamahhyun-access.log combined

    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

3. HTTPS 인증서 발급 및 적용하기

Let's Encrypt의 Certbot을 사용하여 무료 SSL 인증서를 발급받는 명령어는 다음과 같다. 

certbot certonly --webroot --webroot-path=/home/iamahhyun/www -d iamahhyun.ip주소.nip.io

 

해당 도메인을 보유한 경우 인증서가 발급되고, 아래 경로에 저장된다:

/etc/letsencrypt/live/도메인명/cert.pem
/etc/letsencrypt/live/도메인명/privkey.pem
/etc/letsencrypt/live/도메인명/chain.pem

 

현재 실습에서는 도메인이 실제 소유되지 않아 오류가 발생했지만, 도메인 기반 인증서 발급 흐름을 이해하는 데 의미 있는 과정이었다. 


4. phpMyAdmin 최고 관리자 설정하기

마지막으로 phpMyAdmin을 통해 MySQL 데이터베이스에 접근할 수 있는 최고 관리자 계정을 설정하였다. 

  • 아이디 : root
  • 비밀번호 : 직접 설정한 강력한 비밀번호

이 계정은 모든 데이터베이스를 관리할 수 있으므로, 비밀번호 설정 시 보안에 특히 유의하였다. 


5. 마무리

총 5편에 걸쳐 리눅스 서버를 구축하고, 웹 서버 및 데이터베이스 서버를 완성도 높게 구성해보았다. 

이번 마지막 프로젝트에서는 실제 서비스 환경을 모방하여 도메인 기반 가상호스트 구성, SSL 인증서 적용, 서버 최적화 설정등을 해보면서 의미 있는 경험을 쌓을 수 있었다. 

 

 

 

이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.

모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.