Ubuntu 웹 서버 완전 가이드 | Apache + SSL + 최적화 [초보자용]

目次

1. 소개

Ubuntu 웹 서버란?

Web 서버는 인터넷 상에서 웹사이트를 제공하기 위한 시스템입니다. Web 서버 소프트웨어에는 Apache, Nginx, LiteSpeed 등이 있지만, Ubuntu에서 가장 널리 사용되는 것은 Apache입니다. Ubuntu는 경량이고 안정성이 높으며, 오픈소스이기 때문에 개인부터 기업까지 폭넓게 채택되고 있습니다. 특히 LAMP 환경(Linux, Apache, MySQL/MariaDB, PHP)을 구축하기 쉬워 많은 웹사이트와 애플리케이션 운영에 적합합니다.

이 글의 대상 독자

이 글은 Web 서버를 처음 구축하는 초보자를 위한입니다. Ubuntu를 사용해 Web 서버를 시작하고, Apache를 도입하며, 가상 호스트와 SSL 인증서를 설정하면서 최적화 및 보안 강화 방법을 자세히 설명합니다.

이 글에서 배울 수 있는 것

  • Ubuntu에 Web 서버를 구축하는 방법 (Apache 도입·기본 설정)
  • 가상 호스트 설정 및 다중 사이트 운영
  • Let’s Encrypt를 사용한무료 SSL 도입
  • Web 서버의보안 강화와 최적화
  • 자주 발생하는 트러블슈팅과 그 해결책

2. Ubuntu 설치 및 초기 설정

필요한 시스템 요구 사항

Ubuntu를 웹 서버로 운영하려면, 다음과 같은 최소 사양을 권장합니다。
항목최소 요구 사항권장 요구 사항
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz 이상2GHz 이상
메모리512MB2GB 이상
스토리지10GB 이상20GB 이상
네트워크인터넷 연결고속 회선 권장

Ubuntu 다운로드 및 설치

Ubuntu는 공식 사이트(https://ubuntu.com/download/server)에서 다운로드할 수 있습니다。ISO 파일을 받아, VirtualBox나 VMware로 가상 환경을 만들거나、전용 서버나 VPS에 설치합니다。

설치 절차:

  1. 설치 미디어 만들기
  • USB 메모리(Rufus 등 도구 사용)
  • 가상 머신에 ISO 파일 마운트
  1. 설치 마법사에 따라 설정
  • 언어를 “일본어”로 설정
  • 네트워크 연결 확인
  • 사용자 이름·비밀번호 설정
  • SSH 서버 설치(나중에 가능)
  1. OS 설정 완료 후 재부팅
  2. 로그인하고 초기 설정 시작

기본 초기 설정

설치 직후 수행해야 할 초기 설정을 소개합니다。
  1. 패키지 최신화
   sudo apt update && sudo apt upgrade -y
→ 시스템 보안 패치와 소프트웨어 업데이트를 수행합니다。
  1. 시간대 설정
   sudo timedatectl set-timezone Asia/Tokyo
→ 일본 시간(JST)으로 설정합니다。
  1. 방화벽 활성화
   sudo ufw enable
→ 불법 접근을 방지하기 위해 방화벽을 활성화합니다。
  1. SSH 설정(원격 관리용)
  • SSH가 활성화되어 있는지 확인 sudo systemctl status ssh
  • 비활성화된 경우 활성화 sudo systemctl enable --now ssh
이 초기 설정이 완료되면, Ubuntu 서버를 본격적인 웹 서버로 활용할 준비가 됩니다。

3. Apache 설치 및 기본 설정

Apache란?

Apache(정식 명칭: Apache HTTP Server)는 오픈소스 웹 서버 소프트웨어이며, 안정성·확장성·보안성이 높아 전 세계 서버의 약 30%가 Apache를 사용하고 있습니다.

주요 특징:

  • 무료로 이용 가능(오픈소스)
  • 모듈 구조로 확장이 용이
  • SSL/TLS 지원으로 HTTPS화 가능
  • 가상 호스트(Virtual Host)를 통해 여러 사이트를 운영 가능

Apache 설치

Ubuntu에서는 Apache를 패키지 관리 시스템 apt를 사용하여 쉽게 설치할 수 있습니다.

Apache 설치하기

다음 명령을 실행하여 Apache를 설치합니다.
sudo apt update
sudo apt install apache2 -y

설치가 성공했는지 확인하기

설치 후, 다음 명령으로 Apache 버전을 확인할 수 있습니다.
apache2 -v
출력 예:
Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56
이와 같이 버전 정보가 표시되면 정상적으로 설치된 것입니다.

Apache 시작·중지·재시작

Apache는 systemctl 명령을 사용하여 관리합니다.

Apache 시작하기

sudo systemctl start apache2
이렇게 하면 Apache가 시작되어 웹 요청을 처리할 수 있는 상태가 됩니다.

Apache 자동 시작 설정

sudo systemctl enable apache2

Apache 상태 확인

Apache가 정상적으로 동작하는지 확인하려면 다음 명령을 실행합니다.
sudo systemctl status apache2
정상적으로 동작하면 아래와 같은 메시지가 표시됩니다.
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since ...

Apache 재시작·중지

설정을 변경했을 때 Apache를 재시작하려면 아래 명령을 사용합니다.
sudo systemctl restart apache2
Apache를 일시적으로 중지하고 싶을 경우 아래 명령을 실행합니다.
sudo systemctl stop apache2

Apache 동작 확인

Apache가 올바르게 동작하는지 확인하기 위해 서버의 IP 주소에 접근해 봅시다.

1. 자신의 서버 IP 주소 확인

hostname -I
또는 아래 명령을 실행하면 외부 IP를 확인할 수 있습니다.
curl ifconfig.me

2. 웹 브라우저로 확인

브라우저 주소창에 아래를 입력합니다.
http://<서버의 IP 주소>/
또는 로컬 환경인 경우
http://localhost/
Apache의 기본 페이지(/var/www/html/index.html)가 표시될 것입니다. 기본 표시 페이지 예:
Apache2 Ubuntu Default Page
It works!
이 메시지가 표시되면 Apache는 정상적으로 동작하고 있습니다.

방화벽 설정

Ubuntu에서는 UFW(Uncomplicated Firewall)를 사용하여 방화벽을 설정합니다. Apache를 설치한 직후에는 외부에서의 HTTP(포트 80) 및 HTTPS(포트 443) 접근이 차단될 수 있습니다.

Apache용 방화벽 규칙 설정

sudo ufw allow 'Apache'
또는 HTTPS도 허용하려면 아래 명령을 실행합니다.
sudo ufw allow 'Apache Full'

방화벽 상태 확인

sudo ufw status
출력 예:
Status: active

To                         Action      From
--                         ------      ----
Apache                     ALLOW       Anywhere
Apache (v6)                ALLOW       Anywhere (v6)
이와 같이 표시되면 Apache 통신이 허용된 상태입니다.

정리

여기까지 Ubuntu에 Apache를 설치하고 기본 설정을 완료했습니다. 이 글에서 다룬 주요 내용:
  • Apache 설치 방법
  • Apache 시작·자동 시작 설정
  • Apache 동작 확인(브라우저 접근)
  • 방화벽 설정
  • Apache 기본 설정 파일 소개

4. 가상 호스트 설정(다중 사이트 관리)

가상 호스트(Virtual Host)란?

가상 호스트는 하나의 Apache 서버에서 여러 도메인(또는 서브도메인)을 운영하기 위한 메커니즘입니다. 예를 들어, 한 대의 서버에서 example.comtest.com 두 개의 서로 다른 웹사이트를 제공할 수 있습니다. 가상 호스트 종류에는 다음 두 가지가 있습니다。
  1. 기준 기반 가상 호스트(Name-based Virtual Host)
  • 같은 IP 주소로 여러 사이트 운영
  • 일반적인 웹 서버 운영 방식
  1. IP 기반 가상 호스트(IP-based Virtual Host)
  • 다른 IP 주소에 대해 다른 사이트 제공
  • 한 서버에 여러 네트워크 인터페이스가 필요
보통 Name-based Virtual Host(이름 기반 가상 호스트)가 사용됩니다。

가상 호스트 설정 절차

1. 필요한 디렉터리 생성

가상 호스트를 설정하려면 각 사이트마다 전용 디렉터리를 생성합니다。
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. 디렉터리 소유자 변경

Apache가 파일을 올바르게 읽을 수 있도록 소유자를 www-data로 설정합니다。
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html

3. 임시 HTML 파일 생성

동작 확인을 위해 각 웹사이트의 홈페이지용 index.html을 생성합니다。
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html

4. 가상 호스트 설정 파일 생성

가상 호스트 설정 파일은 /etc/apache2/sites-available/ 디렉터리 내에 생성합니다。

example.com 가상 호스트 설정

다음 명령으로 설정 파일을 생성하고 편집합니다。
sudo nano /etc/apache2/sites-available/example.com.conf
설정 파일 내용:
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

test.com 가상 호스트 설정

sudo nano /etc/apache2/sites-available/test.com.conf
다음 내용을 추가:
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

5. 가상 호스트 활성화

설정 파일을 만든 후 가상 호스트를 활성화하기 위해 a2ensite 명령을 실행합니다。
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Apache 설정 테스트

구문에 오류가 없는지 확인합니다。
sudo apachectl configtest
출력 결과:
Syntax OK
문제가 없으면 Apache를 재시작합니다。
sudo systemctl restart apache2

6. 로컬에서 동작 확인(hosts 파일 편집)

가상 호스트가 정상적으로 동작하는지 확인하기 위해 로컬 PC의 hosts 파일을 편집합니다。
sudo nano /etc/hosts
다음 행을 추가:
127.0.0.1 example.com
127.0.0.1 test.com
저장 후 브라우저에서 http://example.com/에 접속하여 “Welcome to example.com”이 표시되는지 확인합니다. 동일하게 http://test.com/에 접속하여 “Welcome to test.com”이 표시되면 성공입니다。

7. 트러블슈팅

가상 호스트가 정상적으로 작동하지 않을 경우, 다음을 확인하십시오。

1. Apache 오류 로그 확인

sudo tail -f /var/log/apache2/error.log

2. 설정 파일이 올바르게 활성화되었는지 확인

ls /etc/apache2/sites-enabled/
적절히 .conf 파일이 나열되어 있으면 가상 호스트가 활성화된 것입니다。

3. Apache 포트 설정 확인

가상 호스트가 포트 80(HTTP)에서 동작하도록 /etc/apache2/ports.conf를 확인하십시오。
sudo nano /etc/apache2/ports.conf
다음 내용이 있는지 확인:
Listen 80

정리

이 섹션에서는 Ubuntu에서 Apache 가상 호스트를 설정하는 방법을 설명했습니다。 이 글에서 배운 내용:
  • 가상 호스트의 개념과 용도
  • 가상 호스트용 디렉터리 생성
  • 가상 호스트 설정 파일 생성 및 활성화
  • 로컬 환경에서 동작 확인 방법
  • 트러블슈팅

5. SSL/TLS 도입(HTTPS화)

SSL/TLS란?

SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security)는 인터넷에서 안전한 통신을 보장하기 위한 암호화 기술입니다.

SSL/TLS 도입의 장점

통신 암호화(데이터가 도청·변조될 위험을 감소) ✅ Google SEO 평가 향상(HTTPS 사이트는 검색 결과에서 우대받음) ✅ 브라우저 경고 회피(HTTP 사이트는 “보호되지 않은 통신”이라고 표시됨) ✅ 온라인 결제·로그인 정보 보호 현재는 TLS(TLS 1.2 / 1.3)가 권장되고 있으며, SSL 3.0 이전은 비권장 상태입니다.

Let’s Encrypt로 무료 SSL 인증서를 받기

Let’s Encrypt는 무료로 SSL 인증서를 발급하는 인증 기관(CA: Certificate Authority)입니다. certbot을 사용하여 쉽게 인증서를 받아 Apache에 적용할 수 있습니다.

Let’s Encrypt 클라이언트(Certbot) 설치

먼저, certbot(Let’s Encrypt 공식 클라이언트)를 설치합니다。
sudo apt update
sudo apt install certbot python3-certbot-apache -y

Apache의 SSL 설정 자동화

Let’s Encrypt는 certbot --apache 명령을 사용하면 Apache 설정을 자동으로 수행합니다。
sudo certbot --apache -d example.com -d www.example.com
이 명령을 실행하면 다음 과정이 진행됩니다:
  1. 도메인 인증(HTTP-01 챌린지)
  2. SSL 인증서 발급
  3. Apache SSL 설정
  4. HTTPS 리다이렉트 설정

SSL 동작 확인

아래 URL에 접속하여 HTTPS가 활성화되어 있는지 확인합니다。
https://example.com/
브라우저 주소 표시줄에 자물쇠 아이콘이 표시되면 성공입니다。

수동으로 Apache에 SSL 설정

certbot --apache를 사용하지 않고 수동으로 SSL을 설정하려면 다음 절차를 실행합니다。

1. Apache SSL 모듈 활성화

sudo a2enmod ssl
sudo systemctl restart apache2

2. SSL 가상 호스트 설정

가상 호스트 설정 /etc/apache2/sites-available/example.com-le-ssl.conf을 편집합니다:
sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
설정 내용:
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. 설정을 활성화하고 Apache 재시작

sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2

SSL 인증서 자동 갱신

Let’s Encrypt 인증서는 90일 동안만 유효합니다。 자동 갱신을 설정하면 수동으로 갱신하는 수고를 줄일 수 있습니다。

1. Certbot 자동 갱신 테스트

sudo certbot renew --dry-run

2. 인증서 자동 갱신 일정 확인

Certbot 자동 갱신은 /etc/cron.d/certbot에 일정이 등록되어 있습니다。
sudo systemctl list-timers | grep certbot

SSL 트러블슈팅

1. SSL 인증서가 적용되지 않음

대책: Apache를 재시작하고 설정 확인
sudo systemctl restart apache2
sudo apachectl configtest

2. 인증서 유효 기간이 만료됨

대책: 수동으로 인증서 갱신
sudo certbot renew --force-renewal

3. Let’s Encrypt 인증 실패

대책: 방화벽 설정 확인
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

요약

이 섹션에서는 Let’s Encrypt를 사용한 무료 SSL 도입 방법을 자세히 설명했습니다。 이 글에서 배운 내용:
  • SSL/TLS 기본 지식
  • Let’s Encrypt를 사용한 Apache SSL 설정
  • 수동 SSL 설정
  • SSL 인증서 자동 갱신
  • SSL 트러블슈팅

6. 웹 서버 보안 강화

방화벽 (UFW) 설정

Ubuntu에서는、UFW(Uncomplicated Firewall) 를 사용하여 불필요한 통신을 차단하는 것이 중요합니다。

현재 방화벽 설정 확인

sudo ufw status

필요한 포트만 허용

기본적으로 모든 연결을 차단하고, 필요한 포트만 열어줍니다。
sudo ufw default deny incoming
sudo ufw default allow outgoing
열어야 할 포트
  • SSH (22번 포트)
  sudo ufw allow 22/tcp
  • HTTP (80번 포트)
  sudo ufw allow 80/tcp
  • HTTPS (443번 포트)
  sudo ufw allow 443/tcp

방화벽 활성화

sudo ufw enable

SSH 보안 강화

기본 상태에서는、SSH가 무차별 대입 공격의 대상이 되기 쉬우므로、적절한 설정을 적용합니다。

SSH 포트 변경

sudo nano /etc/ssh/sshd_config
변경할 항목:
Port 2222  # 22 → 2222 로 변경(원하는 포트 번호)
PermitRootLogin no  # root 로그인 금지
PasswordAuthentication no  # 비밀번호 인증 비활성화(SSH 키 인증만 허용)
변경 후、SSH 재시작:
sudo systemctl restart ssh

Fail2Ban 도입

Fail2Ban은、SSH에 대한 불법 로그인 시도를 하는 IP 주소를 일시적으로 차단하는 도구입니다。
sudo apt install fail2ban -y
설정 파일 편집:
sudo nano /etc/fail2ban/jail.local
다음 설정을 추가:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600
Fail2Ban 활성화:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Apache 보안 설정

버전 정보 숨기기

sudo nano /etc/apache2/conf-available/security.conf
다음 설정을 변경:
ServerTokens Prod
ServerSignature Off
설정 적용:
sudo systemctl restart apache2

디렉터리 목록 표시 비활성화

sudo nano /etc/apache2/apache2.conf
다음 줄을 찾아 Indexes 를 삭제:
<Directory /var/www/>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
설정 적용:
sudo systemctl restart apache2

불필요한 Apache 모듈 비활성화

sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2

보안 헤더 추가

웹 사이트를 보호하기 위해 적절한 보안 헤더를 추가합니다。

mod_headers 활성화

sudo a2enmod headers
sudo systemctl restart apache2

헤더 설정

sudo nano /etc/apache2/sites-available/example.com.conf
다음 내용을 <VirtualHost> 안에 추가:
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
설정 적용:
sudo systemctl restart apache2

문제 해결

방화벽 설정 확인

sudo ufw status

Apache 설정 오류 확인

sudo apachectl configtest
출력:
Syntax OK

SSH 연결이 안 될 경우

포트를 변경한 후 SSH 연결이 안 될 경우、아래와 같이 새로운 포트를 지정하여 연결합니다。
ssh -p 2222 user@server-ip

정리

이 섹션에서는、웹 서버를 안전하게 운영하기 위한 보안 강화 방안을 설명했습니다。 이 글에서 배운 내용:
  • UFW(방화벽) 설정
  • SSH 보호(포트 변경·Fail2Ban)
  • Apache 보안 설정(버전 정보 숨김·디렉터리 목록 비활성화)
  • 보안 헤더 추가

7. 성능 최적화

Apache 튜닝

Apache 기본 설정에서는 요청 처리 효율이 최적이 아닐 수 있습니다。 다음 설정을 조정함으로써 더 높은 성능을 구현 할 수 있습니다。

MPM(멀티프로세싱 모듈) 최적화

MPM(Multi-Processing Module)은 Apache가 요청을 처리하는 방식을 결정합니다。 MPM 현재 설정 확인:
apachectl -M | grep mpm
출력 예시:
mpm_prefork_module (shared)
만약 mpm_prefork_module이라면, 더 빠른 mpm_event로 변경하는 것이 권장됩니다。 변경 방법:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

KeepAlive 활성화

KeepAlive(지속 연결)를 활성화하면 클라이언트가 동일한 연결을 재사용하여 요청 횟수를 줄일 수 있습니다。 설정 파일 편집:
sudo nano /etc/apache2/apache2.conf
다음 설정 확인:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
설정 후 Apache 재시작:
sudo systemctl restart apache2

캐시 활용

브라우저 캐시와 서버 캐시를 활용하여 불필요한 요청을 줄이고, 응답 속도를 향상시킵니다。

mod_expires 활성화(브라우저 캐시)

sudo a2enmod expires
sudo systemctl restart apache2
설정 파일 /etc/apache2/sites-available/example.com.conf에 다음을 추가:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>
설정 후 Apache 재시작:
sudo systemctl restart apache2

mod_cache 활성화(서버 캐시)

sudo a2enmod cache cache_disk
sudo systemctl restart apache2
설정 파일 /etc/apache2/sites-available/example.com.conf에 다음을 추가:
<IfModule mod_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDefaultExpire 86400
</IfModule>
Apache 재시작:
sudo systemctl restart apache2

압축 도입

mod_deflate를 사용하여 웹사이트 데이터를 압축하고 전송 크기를 줄입니다。

mod_deflate 활성화

sudo a2enmod deflate
sudo systemctl restart apache2
설정 파일 /etc/apache2/sites-available/example.com.conf에 다음을 추가:
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
설정 후 Apache 재시작:
sudo systemctl restart apache2

리소스 제한

대량의 요청 및 악의적인 접근에 대비하여 Apache 리소스 제한을 설정하는 것도 중요합니다。

mod_ratelimit 활성화

sudo a2enmod ratelimit
sudo systemctl restart apache2
설정 파일 /etc/apache2/sites-available/example.com.conf에 다음을 추가:
<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>
설정 후 Apache 재시작:
sudo systemctl restart apache2

문제 해결

성능 튜닝 후 문제가 발생했을 때의 대처 방법을 소개합니다。

Apache 오류 로그 확인

sudo tail -f /var/log/apache2/error.log

Apache 부하 상황 확인

sudo apachectl status

서버의 CPU·메모리 사용률 확인

top
또는
htop
(htop이 없는 경우 sudo apt install htop로 설치)

정리

이 섹션에서는 웹 서버 성능을 향상시키는 방법을 설명했습니다。 본 기사에서 배운 내용:
  • Apache 튜닝(MPM 최적화·KeepAlive 설정)
  • 캐시 활용(브라우저 캐시·서버 캐시)
  • 데이터 압축(mod_deflate 도입)
  • 리소스 제한(mod_ratelimit으로 접근 제어)

8. 문제 해결

Apache가 시작되지 않거나 중지될 때

Apache 상태 확인

sudo systemctl status apache2
출력 예:
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since ...
Active: failed 인 경우 오류가 발생했습니다.

에러 로그 확인

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

사용 포트 확인

sudo netstat -tulnp | grep ':80'
또는
sudo lsof -i:80
포트가 충돌하는 경우, /etc/apache2/ports.conf 를 편집하고 적절한 포트를 설정하십시오.

SSL 인증서 관련 오류

SSL 인증서 만료

sudo certbot renew --force-renewal

AH02572: Failed to configure at least one certificate

Apache 설정 파일 /etc/apache2/sites-available/example.com-le-ssl.conf 을 열고, 아래를 확인하십시오:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
설정이 올바른 경우, Apache를 재시작하십시오:
sudo systemctl restart apache2

웹사이트가 표시되지 않음 (403, 404, 500 오류)

403 Forbidden

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

404 Not Found

가상 호스트 설정 /etc/apache2/sites-available/example.com.conf 을 열고, DocumentRoot 경로를 확인하십시오.
DocumentRoot /var/www/example.com/public_html
또한, mod_rewrite 가 비활성화된 경우:
sudo a2enmod rewrite
sudo systemctl restart apache2

500 Internal Server Error

에러 로그 확인:
sudo tail -f /var/log/apache2/error.log
.htaccess 를 이름 변경하여 회피:
mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak

고부하 및 성능 문제

Apache 부하 상황 확인

top
또는
htop

불필요한 Apache 모듈 비활성화

sudo a2dismod status
sudo a2dismod autoindex
sudo systemctl restart apache2

캐시 최적화

sudo a2enmod cache cache_disk

네트워크 관련 문제

서버 IP 주소 확인

ip a
또는
curl ifconfig.me

포트가 열려 있는지 확인

sudo netstat -tulnp | grep LISTEN
또는
sudo lsof -i :80
80번(HTTP)이나 443번(HTTPS)이 목록에 없을 경우, 방화벽을 조정하십시오:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

요약

이 섹션에서는 Ubuntu 웹 서버(Apache)에서 발생하기 쉬운 오류의 원인과 해결책을 설명했습니다. 이 기사에서 배운 내용:
  • Apache가 시작되지 않을 때의 대처 방법
  • SSL 인증서 관련 오류 해결
  • 403 / 404 / 500 오류의 원인과 수정
  • 성능 최적화
  • 네트워크 연결 확인

9. 요약

지금까지 배운 내용

각 섹션에서 설명한 내용을 되돌아봅시다.
섹션내용
1. 시작Ubuntu 웹 서버의 기본 개념과 이 글의 목적
2. Ubuntu 설치 및 초기 설정OS 설치, 업데이트, 방화벽 설정
3. Apache 설치 및 기본 설정Apache 도입, 시작, 동작 확인
4. 가상 호스트 설정여러 웹사이트를 호스팅하는 설정
5. SSL/TLS 도입Let’s Encrypt를 사용한 HTTPS 적용
6. 웹 서버 보안 강화방화벽 설정, SSH 보호, Apache 보안
7. 성능 최적화캐시, 데이터 압축, Apache 최적화 설정
8. 트러블슈팅Apache 오류 대응, SSL 문제 수정, 부하 대책

다음 단계

Ubuntu 웹 서버 기본 설정이 완료되면, 다음과 같은 응용 설정 및 기술을 배우면서 더욱 실용적인 서버 환경을 구축할 수 있습니다. ✅ WordPress 및 PHP 애플리케이션 도입데이터베이스 서버(MySQL / MariaDB) 설정리버스 프록시(Nginx + Apache) 구축오토스케일 환경 구축 (AWS, GCP, Azure 활용) ✅ 로그 관리 및 모니터링 (fail2ban 및 logwatch 활용)

자주 묻는 질문(FAQ)

Q1: Ubuntu에서 Nginx와 Apache 중 어느 것을 선택해야 할까요?

A1: 정적 콘텐츠 배포가 주된 경우 Nginx, 동적 콘텐츠(PHP 등)가 많은 경우 Apache를 권장합니다. Nginx는 리버스 프록시로도 사용할 수 있으며, Apache와 결합하는 것도 가능합니다.

Q2: SSL 인증서 갱신을 자동화할 수 있나요?

A2: Certbot을 설치하면 자동 갱신이 가능합니다. 명령 sudo certbot renew --dry-run 로 테스트하고, 스케줄에 cron을 설정하면 좋습니다.

Q3: 웹 서버 보안을 더 강화하려면?

A3: Fail2Ban으로 무차별 공격을 방지하고, Apache 버전 정보를 숨기며, 불필요한 모듈을 비활성화하는 것이 기본 대책입니다.

Q4: Apache 성능을 향상시키는 방법은?

A4: MPM을 적절히 선택(event / worker), 캐시 설정(mod_cache), 데이터 압축(mod_deflate)을 수행합니다.

Q5: 웹사이트가 “403 Forbidden” 오류를 반환하는 원인은?

A5: 디렉터리 소유권이 www-data로 설정되어 있는지 확인하고, chmod -R 755 로 적절한 권한을 설정합니다.

요약

Ubuntu 웹 서버 구축은 기본 설정부터 고급 최적화까지 많은 단계가 필요하지만, 한 번 이해하면 매우 강력한 환경을 구축할 수 있습니다. 🚀 이 글을 참고하여 보다 안전하고 빠른 웹 서버를 구축하고, 운영 스킬을 향상시키세요! 🚀
年収訴求