Ubuntu 24.04 웹서버 구축 완벽 가이드: Nginx + PHP 8.3 + MariaDB 최적화

Ubuntu 24.04 기반 고성능 웹서버(LEMP) 구축 가이드

느린 웹사이트는 방문자와 구글 검색 순위 모두를 잃게 만듭니다. 본 가이드는 단순한 설치를 넘어 실무에서 사용하는 최적화 설정을 그대로 반영했습니다. 불필요한 설명은 배제하고, 터미널에 바로 붙여넣어 10분 만에 전문가급 서버를 구축하는 과정을 정리합니다.

목차 01

시스템 준비 및 기본 설정

본격적인 스택 설치 전, 서버의 작업 환경을 구축하는 단계입니다. 시간대 설정과 메모리 확보를 통해 안정성을 높입니다.

1.1 터미널 가독성 설정 (선택사항)

사용자명과 경로를 색상으로 구분하여 명령어 입력 시 가독성을 높입니다.

echo ‘export PS1=”\e[32m\u@\h\e[0m:\e[34m\w\e[0m\$ “‘ >> ~/.bashrc
source ~/.bashrc

1.2 시스템 업데이트 및 업그레이드

최신 보안 패치를 적용하여 서버 패키지 상태를 최신화합니다.

sudo apt update && sudo apt upgrade -y

1.3 한국 시간대(KST) 설정

서버 시스템 시간과 로그 기록 시간을 한국 표준시로 일치시킵니다.

sudo timedatectl set-timezone Asia/Seoul
timedatectl
팁: 결과 화면의 Local time 항목이 KST로 표시되는지 확인하십시오.

1.4 SWAP 메모리 설정 (2GB 권장)

메모리 부족 시 발생할 수 있는 서버 멈춤 현상을 방지하기 위해 가상 메모리를 할당합니다.

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab

1.5 시스템 사양 최종 점검

OS 버전, CPU, 메모리 상태를 마지막으로 확인합니다.

lsb_release -d
lscpu | grep “Model name”
free -h
목차 02

Nginx 웹서버 설치 및 구성

Nginx는 가볍고 빠른 처리가 가능한 엔진으로, 최신 Ubuntu 24.04 저장소의 패키지를 사용하여 설치를 진행합니다.

2.1 Nginx 설치 및 실행

패키지를 설치하고 서버 부팅 시 자동으로 실행되도록 설정합니다.

sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

2.2 보안 및 성능 최적화 (nginx.conf)

보안을 위해 Nginx 버전을 숨기고, 전송 속도 향상을 위해 Gzip 압축을 활성화합니다.

# 설정 파일 수정을 위해 에디터를 엽니다
sudo nano /etc/nginx/nginx.conf

파일 내부에서 다음 항목을 찾아 주석(#)을 제거하거나 수정하십시오.

server_tokens off; # Nginx 버전 정보 노출 차단
gzip on; # 데이터 압축 전송 활성화
gzip_comp_level 5; # 압축 효율 설정 (1~9)
gzip_types text/plain text/css application/json application/javascript text/xml;
나노 에디터 사용법: 수정 후 Ctrl+O (저장) -> Enter -> Ctrl+X (닫기)

2.3 설정값 검사 및 적용

수정한 설정 파일에 문법적 오류가 없는지 확인한 뒤 서버에 적용합니다.

sudo nginx -t
sudo systemctl reload nginx
팁: syntax is ok 메시지가 나오면 정상입니다. reload는 서비스 중단 없이 설정을 반영합니다.
목차 03

PHP 8.3 설치 및 최적화

워드프레스와 같은 동적 웹사이트 구동을 위해 PHP 8.3을 설치합니다. 최신 엔진과 더불어 실행 속도를 획기적으로 높여주는 OPcache 설정을 포함합니다.

3.1 PHP 8.3 및 필수 확장 모듈 설치

Nginx와 통신하기 위한 FPM 모듈 및 워드프레스 운영에 꼭 필요한 이미지 처리, 문자열, DB 연결 모듈을 함께 설치합니다.
sudo apt install php8.3-fpm php8.3-mysql php8.3-common php8.3-gd php8.3-intl php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-imagick php8.3-opcache -y

3.2 PHP-FPM 실행 및 자동 시작 설정

설치된 PHP 서비스가 정상적으로 동작하도록 실행 상태를 점검합니다.
sudo systemctl enable php8.3-fpm sudo systemctl start php8.3-fpm

3.3 성능 최적화: OPcache 및 업로드 용량 설정

컴파일된 PHP 코드를 메모리에 캐싱하여 속도를 높이고, 워드프레스 테마나 이미지 업로드 시 용량 제한에 걸리지 않도록 설정값을 수정합니다.
sudo nano /etc/php/8.3/fpm/php.ini
파일 내에서 다음 항목들을 찾아 아래와 같이 수정하십시오. (Ctrl+W로 검색 가능)
memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 date.timezone = Asia/Seoul # OPcache 활성화 (주석 제거 및 설정) opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000

3.4 PHP 서비스 재시작

변경된 설정값을 시스템에 적용합니다.
sudo systemctl restart php8.3-fpm
팁: 설정 변경 후에는 반드시 서비스를 재시작해야 반영됩니다.

3.5 웹 디렉토리 권한 설정

PHP가 파일을 쓰고 수정할 수 있도록 웹 루트 폴더의 소유권을 변경합니다.

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
목차 04

MariaDB 데이터베이스 서버 구축

웹사이트의 모든 데이터가 저장되는 엔진입니다. MySQL의 강력한 대안이자 고성능 오픈소스인 MariaDB를 설치하고 보안을 강화합니다.

4.1 MariaDB 설치 및 실행

Ubuntu 24.04 공식 저장소를 통해 MariaDB를 설치하고 서버 부팅 시 자동으로 실행되도록 설정합니다.

sudo apt install mariadb-server -y
sudo systemctl enable mariadb
sudo systemctl start mariadb

4.2 MariaDB 보안 스크립트 실행

설치 직후 외부 침입을 방지하고 불필요한 테스트 데이터를 제거하기 위해 보안 설정을 진행합니다.

sudo mysql_secure_installation

실행 시 나타나는 질문에 다음과 같이 답변하십시오.

1. Switch to unix_socket authentication? : n
2. Change the root password? : y (루트 비밀번호 설정)
3. Remove anonymous users? : y
4. Disallow root login remotely? : y
5. Remove test database and access to it? : y
6. Reload privilege tables now? : y

4.3 워드프레스용 데이터베이스 및 전용 계정 생성

보안을 위해 관리자(root) 계정 대신 특정 데이터베이스만 제어할 수 있는 전용 사용자 계정을 만듭니다.

# MariaDB 관리자 모드로 접속
sudo mariadb -u root -p

접속 후 아래 쿼리를 한 줄씩 입력하십시오. (your_password 부분은 본인만의 비밀번호로 수정)

CREATE DATABASE my_website_db;
CREATE USER ‘my_user’@’localhost’ IDENTIFIED BY ‘your_password’;
GRANT ALL PRIVILEGES ON my_website_db.* TO ‘my_user’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
팁: MariaDB는 MySQL 명령어를 그대로 사용할 수 있어 호환성이 매우 뛰어납니다.
목차 06

서버 최적화 및 가상 호스트 설정

Nginx와 PHP-FPM을 유기적으로 연결하고, 대량의 접속에도 안정적으로 구동될 수 있도록 성능을 쥐어짜는 최종 설정 단계입니다.

6.1 웹 파일 소유권 및 권한 교정

워드프레스에서 플러그인 설치나 이미지 업로드 시 발생하는 권한 오류를 방지하기 위해 파일 소유권을 웹 서버 계정으로 변경합니다.

# 웹 루트 디렉토리 소유권을 www-data로 변경
sudo chown -R www-data:www-data /var/www/html

# 폴더 및 파일 권한 일괄 설정
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

6.2 Nginx 가상 호스트 설정 (PHP 연동)

Nginx가 PHP 파일을 인식하고 고성능으로 처리할 수 있도록 기본 설정 파일을 수정합니다.

sudo nano /etc/nginx/sites-available/default

기존 내용을 모두 지우고 아래 최적화된 설정값을 복사하여 붙여넣으십시오.

server {
    listen 80;
    server_name yourdomain.com; # 도메인 또는 IP 입력
    root /var/www/html;
    index index.php index.html;

    # 워드프레스 고유주소(Permalink) 설정 지원
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP-FPM 연동 및 보안 강화
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 정적 파일 캐싱 (이미지, CSS, JS 속도 향상)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }
}

6.3 전체 서비스 재시작 및 연동 확인

지금까지의 모든 설정을 검사하고 서비스를 재시작하여 최종적으로 시스템을 가동합니다.

# Nginx 설정 문법 검사
sudo nginx -t

# 설정에 문제가 없다면 서비스 재시작
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm

# PHP 연동 테스트 파일 생성
echo “<?php phpinfo(); ?>” | sudo tee /var/www/html/info.php
최종 확인: 브라우저에서 http://도메인/info.php 접속 후 PHP 8.3 정보 화면이 나오면 모든 구축이 끝난 것입니다. 확인 후 보안을 위해 sudo rm /var/www/html/info.php 명령어로 테스트 파일을 반드시 삭제하십시오.
목차 06

서버 최적화 및 가상 호스트 설정

Nginx와 PHP-FPM을 연결하고, 대량의 접속에도 안정적으로 구동될 수 있도록 성능을 극대화하는 최종 설정 단계입니다.

6.1 웹 파일 소유권 및 권한 교정

워드프레스에서 플러그인 설치나 이미지 업로드 시 발생하는 권한 오류를 원천 차단하기 위해 소유권을 변경합니다.

# 웹 루트 디렉토리 소유권을 www-data로 변경
sudo chown -R www-data:www-data /var/www/html

# 폴더 및 파일 권한 일괄 설정
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

6.2 Nginx 가상 호스트 설정 (PHP 8.3 연동)

Nginx가 PHP 파일을 인식하고 고성능으로 처리할 수 있도록 기본 설정 파일을 수정합니다. 기존 내용은 모두 지우고 아래 최적화된 코드를 사용하세요.

sudo nano /etc/nginx/sites-available/default
server {
    listen 80;
    server_name yourdomain.com; # 도메인 또는 서버 IP
    root /var/www/html;
    index index.php index.html;

    # 워드프레스 고유주소(Permalink) 및 보안 설정
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP-FPM 8.3 소켓 연동
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 정적 파일 캐싱 (이미지, CSS, JS 속도 향상)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }
}

6.3 통신 소켓 검증 및 최종 적용

Nginx와 PHP가 만나는 통로인 소켓 파일이 정확한 위치에 있는지 확인한 뒤 서비스를 재시작합니다.

# 소켓 파일 존재 여부 확인 (아무 에러가 없어야 정상)
ls -al /run/php/php8.3-fpm.sock

# Nginx 설정 문법 검사
sudo nginx -t

# 모든 서비스 재시작
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
팁: nginx -t 결과에서 test is successful 문구가 나오면 모든 설정이 완벽한 것입니다.

6.4 PHP 연동 최종 확인

브라우저를 통해 실제 서버가 PHP를 정상적으로 처리하는지 테스트합니다.

echo “<?php phpinfo(); ?>” | sudo tee /var/www/html/info.php
최종 확인: 브라우저에서 http://서버IP/info.php 접속 시 PHP 8.3 정보 페이지가 나오면 성공입니다. 확인 후 보안을 위해 반드시 아래 명령어로 테스트 파일을 삭제하세요.

sudo rm /var/www/html/info.php

서버 구축 대장정이 완료되었습니다

기초 설정부터 보안 SSL 적용, 그리고 성능 최적화까지 모든 과정을 성공적으로 마치셨습니다.
이제 귀하의 서버는 수많은 방문자를 맞이할 준비가 된 고성능 상태입니다.
불필요한 리소스 낭비 없이, 오직 귀하의 콘텐츠에만 집중할 수 있는 환경이 마련되었습니다.

다음 단계: 워드프레스 자동 설치 가이드 확인하기
알림: 서버 운영 중 궁금한 점이나 막히는 부분이 있다면 언제든 댓글로 남겨주세요.
Keytechcore는 여러분의 성공적인 IT 운영을 응원합니다.