서버 최적화 | Nginx, PHP, MySQL 튜닝으로 빠르고 안정적인 환경 구축

서버 최적화 Ubuntu 22.04 최적화된 서버 환경 구축 가이드

서버 최적화 - 서버 환경을 표현한 미래형 데이터 센터. 푸른빛과 녹색이 조화를 이루는 서버 랙이 빛나며, 홀로그램 UI가 실시간 성능 데이터를 표시하고 있다.

서버 최적화 가이드 시작합니다 ^^ 서버는 항상 자신이 필요한 운영에 맞춰서 최적화를 적용해주는 것이 좋지만 아래의 방법들은 기본적으로 이것만큼은 적용해도 무방하다 싶어서 그에 맞춰서 작성했습니다.


서버 최적화 개요

서버 최적화는 성능을 향상시키고, 보안을 강화하며, 리소스를 효율적으로 활용할 수 있도록 돕습니다. 이번 가이드에서는 Ubuntu 22.04 환경에서 웹 서버를 운영할 때 필요한 필수 최적화 작업을 단계별로 진행할 거예요.

특히, Nginx, PHP 8.2, MariaDB 등 주요 구성 요소를 대상으로 성능 개선과 보안 강화를 중점적으로 다룰 예정입니다. 💡

이 가이드는 설치는 완료된 상태에서 진행되며, 불필요한 서비스 제거, 설정 최적화, 리소스 제한 조정, 보안 설정을 중심으로 진행됩니다.

각 단계는 실무에서 바로 적용할 수 있도록 설정 파일 수정 및 명령어 예제와 함께 제공되니, 차근차근 따라 해보세요! 🚀


목차

  1. Ubuntu 22.04 기본 최적화
  2. Nginx 최적화
  3. PHP 8.2 최적화
  4. MariaDB (MySQL) 최적화
  5. 보안 및 방화벽 설정
  6. SSL 인증서 적용 (HTTPS 설정)
  7. WordPress 최적화

Ubuntu 22.04 기본 최적화

서버를 최적화하려면 먼저 시스템의 기본적인 환경을 정리하고, 리소스를 효율적으로 사용할 수 있도록 설정해야 합니다. 이를 통해 서버의 안정성과 성능을 높일 수 있습니다.

1️⃣ 시스템 패키지 최신화 및 불필요한 패키지 정리

최신 보안 패치와 성능 개선 업데이트를 적용하고, 불필요한 패키지를 정리합니다.

sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
sudo apt autoclean

🔹 의미:
– `apt update` : 패키지 목록을 최신 상태로 업데이트
– `apt upgrade -y` : 모든 패키지를 최신 버전으로 업그레이드
– `apt autoremove -y` : 불필요한 패키지를 자동으로 삭제
– `apt autoclean` : 오래된 패키지 캐시를 정리하여 디스크 공간 확보

2️⃣ 시스템 리소스 제한 조정 (`nofile` 설정)

서버가 과부하되지 않도록 리소스 사용을 제한하면 더 안정적인 운영이 가능합니다.

📌 설정할 파일: `/etc/security/limits.conf`

sudo nano /etc/security/limits.conf

파일의 끝에 다음 설정을 추가합니다:

* soft nofile 8192
* hard nofile 65535

soft nofile 8192 : 기본적으로 허용되는 최대 파일 개수 (일반적인 웹 서버 환경에 적절한 값)
hard nofile 65535 : 최대 파일 개수의 상한 값 (필요한 경우 더 높일 수 있음)

🔹 `nofile` 설정의 의미

  • soft nofile: 기본적으로 사용할 수 있는 최대 파일 개수 (소프트 제한)
  • hard nofile: 강제로 사용할 수 있는 최대 파일 개수 (하드 제한, 소프트 제한보다 커야 함)

🔹 현재 서버의 `nofile` 값 확인

현재 설정된 `nofile` 값을 확인하려면 다음 명령어를 실행하세요.

ulimit -n

🔹 `nofile` 값을 더 확실하게 적용하는 방법

시스템 전체 설정을 변경하려면 다음 파일도 수정해야 합니다.

sudo nano /etc/systemd/system.conf

파일에 다음 내용을 추가합니다.

DefaultLimitNOFILE=65535
sudo nano /etc/systemd/user.conf
DefaultLimitNOFILE=65535

설정 적용 후, SSH를 다시 시작하거나 서버를 재부팅합니다.

sudo systemctl daemon-reexec

3️⃣ 스왑 메모리 최적화

스왑(swap) 메모리를 적절히 설정하면 물리적 메모리가 부족할 때 성능 저하를 방지할 수 있습니다.

📌 설정할 파일: `/etc/sysctl.conf`
수정 명령어:

sudo nano /etc/sysctl.conf

파일 하단에 다음 내용을 추가합니다:

vm.swappiness=10

🔹 의미:
– `vm.swappiness=10` : 스왑 사용률을 최소화하여 물리 메모리(RAM)를 우선적으로 활용

설정을 적용하려면 다음 명령어를 실행합니다.

sudo sysctl -p

4️⃣ CPU 및 메모리 사용량 실시간 모니터링

서버의 리소스 사용량을 실시간으로 모니터링할 수 있도록 `htop` 도구를 설치합니다.

sudo apt install htop -y

설치 후, 실행하려면 다음 명령어를 입력하세요.

htop

이 명령어를 실행하면 CPU, 메모리, 프로세스 상태를 실시간으로 확인할 수 있습니다.

5️⃣ 커널 매개변수 최적화

서버의 네트워크 및 프로세스 성능을 향상시키기 위해 커널 설정을 최적화합니다.

📌 설정할 파일: `/etc/sysctl.conf`
수정 명령어:

sudo nano /etc/sysctl.conf

파일 하단에 다음 내용을 추가합니다:

net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

🔹 설정 의미

  • net.core.somaxconn = 65535 : 동시에 처리할 수 있는 최대 연결 수 증가
  • net.ipv4.tcp_tw_reuse = 1 : 빠른 재연결을 허용하여 연결 속도 향상
  • net.ipv4.tcp_fin_timeout = 15 : 연결 종료 후 대기 시간을 줄여 리소스 활용 최적화

설정을 적용하려면 다음 명령어를 실행하세요.

sudo sysctl -p

이제 Ubuntu 22.04의 기본 최적화가 완료되었습니다! 🎉

Nginx 최적화

Nginx는 빠르고 가벼운 웹 서버이지만, 기본 설정 그대로 사용하면 성능이 제한될 수 있습니다. 최적화된 설정을 적용하여 더 많은 동시 접속을 처리하고 웹사이트 속도를 향상시킬 수 있습니다.

1️⃣ Worker 프로세스 및 연결 수 조정

Nginx가 동시에 더 많은 요청을 처리할 수 있도록 설정을 변경합니다.

📌 설정할 파일: `/etc/nginx/nginx.conf`
수정 명령어:

sudo nano /etc/nginx/nginx.conf

다음 설정을 변경하거나 추가합니다:

worker_processes auto;
worker_connections 768;

worker_processes auto : 서버의 CPU 코어 수에 따라 자동으로 워커 프로세스를 설정합니다.
worker_connections 768 : 하나의 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수를 증가시킵니다. (추천 값)

🔹 `worker_connections` 값에 대한 적절한 설정

  • 경량 트래픽 서버: worker_connections 512
  • 일반적인 웹 서버: worker_connections 768 ~ 1024 (추천)
  • 고트래픽 서버 (많은 동시 접속): worker_connections 2048
  • 대형 트래픽 API 서버: worker_connections 4096

✅ 저는 일반적인 웹 서버 환경에서는 worker_connections 768을 추천합니다. 너무 높으면 불필요한 리소스를 낭비할 수 있기 때문입니다.

2️⃣ 파일 업로드 크기 제한 증가

기본적으로 Nginx에서는 큰 파일 업로드가 제한될 수 있습니다. 업로드 크기를 늘려 보다 큰 파일을 허용하도록 설정합니다.

📌 설정할 파일: `/etc/nginx/nginx.conf`
수정 명령어:

sudo nano /etc/nginx/nginx.conf

파일 내 `http {}` 또는 `server {}` 블록 안에 다음 설정을 추가합니다.

http {
    ...
    client_max_body_size 100M;
}

또는 특정 서버 블록에만 적용하고 싶다면:

server {
    listen 80;
    server_name yourdomain.com;
    
    client_max_body_size 100M;

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

3️⃣ Gzip 압축 활성화

Gzip 압축을 활성화하면 웹페이지 로딩 속도가 빨라지고 트래픽 사용량이 감소합니다.

📌 설정할 파일: `/etc/nginx/nginx.conf`
수정 명령어:

sudo nano /etc/nginx/nginx.conf

다음 설정을 추가합니다:

gzip on;
gzip_types text/css application/javascript text/javascript application/json;

✅ 이 설정을 적용하면 HTML, CSS, JavaScript 등의 파일이 압축되어 더 빠르게 전송됩니다.

4️⃣ Keepalive 설정 최적화

Keepalive 설정을 조정하면 브라우저와의 연결을 유지하여 요청 속도를 높일 수 있습니다.

keepalive_timeout 65;
keepalive_requests 100;

keepalive_timeout 65; : 클라이언트와의 연결을 65초 동안 유지하여 반복 요청 시 속도를 개선합니다.
keepalive_requests 100; : 하나의 연결에서 최대 100개의 요청을 처리하도록 설정합니다.

5️⃣ FastCGI 캐싱 설정 (PHP-FPM 연동 시 성능 개선)

FastCGI 캐시를 활성화하면 PHP 페이지의 로딩 속도를 크게 개선할 수 있습니다.

📌 설정할 파일: `/etc/nginx/nginx.conf`
수정 명령어:

sudo nano /etc/nginx/nginx.conf

다음 설정을 추가합니다:

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=FASTCGI_CACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_valid 200 301 302 60m;

✅ 이 설정을 적용하면 동일한 PHP 요청을 캐싱하여 서버의 부하를 줄이고 응답 속도를 개선할 수 있습니다.

6️⃣ 변경 사항 적용

설정 파일을 저장한 후 Nginx를 다시 로드해야 합니다.

sudo nginx -t
sudo systemctl reload nginx

sudo nginx -t : 설정 파일에 오류가 없는지 확인합니다.
sudo systemctl reload nginx : 변경 사항을 적용합니다.

이제 Nginx의 최적화가 완료되었습니다! 🚀


PHP 8.2 최적화

PHP 8.2는 성능이 개선된 최신 버전이지만, 기본 설정 그대로 사용하면 최상의 성능을 발휘하기 어렵습니다. PHP-FPM과 Opcache 설정을 최적화하여 실행 속도를 향상시킬 수 있습니다.

1️⃣ PHP-FPM 프로세스 관리 최적화

PHP-FPM의 프로세스 수를 조정하면 트래픽이 많을 때 더 안정적인 운영이 가능합니다.

📌 설정할 파일: `/etc/php/8.2/fpm/pool.d/www.conf`
수정 명령어:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

다음 설정을 변경합니다:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s;

pm = dynamic : 동적으로 프로세스를 생성하고 제거하여 리소스를 효율적으로 관리합니다.
pm.max_children = 50 : 동시에 실행할 수 있는 최대 PHP 프로세스 수를 설정합니다.
pm.start_servers = 10 : 시작 시 생성할 초기 PHP 프로세스 수를 설정합니다.
pm.min_spare_servers = 5 : 최소한 대기할 PHP 프로세스 수를 설정하여 요청이 적을 때 불필요한 프로세스를 줄입니다.
pm.max_spare_servers = 20 : 최대한 대기할 PHP 프로세스 수를 설정하여 과도한 리소스 사용을 방지합니다.
pm.process_idle_timeout = 10s; : 사용되지 않는 프로세스는 10초 후 종료됩니다.

2️⃣ Opcache 설정 최적화

Opcache를 활성화하면 PHP 코드가 캐시에 저장되어 실행 속도가 빨라집니다.

📌 설정할 파일: `/etc/php/8.2/fpm/conf.d/10-opcache.ini`
수정 명령어:

sudo nano /etc/php/8.2/fpm/conf.d/10-opcache.ini

다음 설정을 추가 또는 변경합니다:

opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.jit=off

opcache.enable=1 : Opcache를 활성화합니다.
opcache.memory_consumption=192 : Opcache에 사용할 메모리 크기를 증가시킵니다.
opcache.max_accelerated_files=4000 : 캐싱할 최대 파일 수를 지정합니다.
opcache.validate_timestamps=1 : 변경된 파일을 감지하여 새로 캐싱할 수 있도록 설정합니다.
opcache.revalidate_freq=60 : 변경된 파일을 60초마다 확인하도록 설정합니다.
opcache.jit=off : JIT 컴파일러는 일부 환경에서 비효율적일 수 있어 비활성화합니다.

3️⃣ Realpath_cache 설정 최적화

realpath_cache는 PHP가 파일의 경로를 빠르게 찾을 수 있도록 도와줍니다.

📌 설정할 파일: `/etc/php/8.2/fpm/php.ini`
수정 명령어:

sudo nano /etc/php/8.2/fpm/php.ini

다음 설정을 추가 또는 변경합니다:

realpath_cache_size=256k
realpath_cache_ttl=600

realpath_cache_size=256k : PHP의 경로 캐시 크기를 늘려 성능을 향상시킵니다.
realpath_cache_ttl=600 : 경로 캐시를 10분(600초) 동안 유지합니다.

4️⃣ PHP 메모리 및 실행 시간 제한 조정

PHP 실행 시간이 짧거나 메모리 제한이 낮으면 WordPress 같은 애플리케이션에서 오류가 발생할 수 있습니다.

📌 설정할 파일: `/etc/php/8.2/fpm/php.ini`
수정 명령어:

sudo nano /etc/php/8.2/fpm/php.ini

다음 설정을 변경합니다:

max_execution_time = 300
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M

max_execution_time = 300 : PHP 스크립트의 최대 실행 시간을 300초로 설정
memory_limit = 256M : PHP가 사용할 수 있는 최대 메모리 제한을 256MB로 설정
upload_max_filesize = 100M : 업로드 가능한 최대 파일 크기를 100MB로 설정
post_max_size = 100M : POST 요청을 통한 최대 데이터 크기를 100MB로 설정

5️⃣ 변경 사항 적용

모든 설정을 변경한 후 PHP-FPM을 재시작해야 합니다.

sudo systemctl restart php8.2-fpm

변경 사항이 적용되었는지 확인하려면 다음 명령어를 실행하세요:

php -i | grep opcache

이제 PHP 8.2 최적화가 완료되었습니다! 🚀

MariaDB (MySQL) 최적화

MariaDB는 강력한 데이터베이스 시스템이지만, 기본 설정 그대로 사용하면 성능을 충분히 활용하지 못할 수 있습니다. 최적화된 설정을 적용하면 쿼리 실행 속도를 향상시키고 리소스를 효율적으로 사용할 수 있습니다.

1️⃣ InnoDB 성능 최적화

InnoDB 엔진은 대부분의 웹 애플리케이션에서 기본적으로 사용됩니다. 적절한 설정을 적용하면 더 높은 성능을 기대할 수 있습니다.

📌 설정할 파일: `/etc/mysql/mariadb.conf.d/50-server.cnf`
수정 명령어:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

다음 설정을 추가 또는 변경합니다:

[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 4
innodb_write_io_threads = 4

innodb_buffer_pool_size = 512M : InnoDB가 데이터를 캐시하는 메모리 크기를 설정합니다. (RAM 크기에 맞춰 조절 가능)
innodb_log_file_size = 128M : 트랜잭션 로그 파일 크기를 증가시켜 쓰기 성능을 향상시킵니다.
innodb_flush_log_at_trx_commit = 2 : 데이터 안전성과 성능을 절충한 설정으로 변경하여 성능을 향상시킵니다.
innodb_flush_method = O_DIRECT : OS 캐시를 우회하여 I/O 성능을 높입니다.
innodb_read_io_threads = 4 : InnoDB의 읽기 작업을 병렬로 처리하도록 설정합니다.
innodb_write_io_threads = 4 : InnoDB의 쓰기 작업을 병렬로 처리하도록 설정합니다.

2️⃣ Query Cache 설정 (MariaDB 전용)

Query Cache는 동일한 쿼리를 반복 실행할 때 캐싱하여 속도를 높여줍니다.

query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M

query_cache_type = 1 : Query Cache를 활성화합니다.
query_cache_size = 64M : 캐시할 메모리 크기를 설정합니다.
query_cache_limit = 2M : 단일 쿼리의 최대 캐시 크기를 설정합니다.

3️⃣ 동시 연결 및 성능 최적화

동시 접속이 많아질 경우 성능을 향상시키는 설정을 추가합니다.

max_connections = 200
thread_cache_size = 50
table_open_cache = 4000
sort_buffer_size = 4M
read_buffer_size = 4M

max_connections = 200 : 동시 접속 가능한 최대 클라이언트 수를 조정합니다.
thread_cache_size = 50 : 캐시된 스레드를 유지하여 새로운 연결이 발생할 때 빠르게 처리합니다.
table_open_cache = 4000 : 열 수 있는 테이블의 최대 개수를 설정합니다.
sort_buffer_size = 4M : 정렬 작업을 수행할 때 사용되는 버퍼 크기를 증가시킵니다.
read_buffer_size = 4M : 읽기 작업을 위한 버퍼 크기를 증가시킵니다.

4️⃣ 외부 접속 제한 (보안 강화)

보안 강화를 위해 MariaDB가 외부에서 접근되지 않도록 설정합니다.

📌 설정할 파일: `/etc/mysql/mariadb.conf.d/50-server.cnf`
수정 명령어:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

다음 설정을 추가 또는 변경합니다:

bind-address = 127.0.0.1

이 설정을 적용하면 데이터베이스가 로컬에서만 접근할 수 있어 보안이 강화됩니다.

5️⃣ 변경 사항 적용

설정을 변경한 후 MariaDB를 재시작해야 합니다.

sudo systemctl restart mariadb

설정이 올바르게 적용되었는지 확인하려면 다음 명령어를 실행하세요:

mysql -u root -p -e "SHOW VARIABLES LIKE 'query_cache_size';"

이제 MariaDB 최적화가 완료되었습니다! 🚀

보안 및 방화벽 설정

서버의 보안을 강화하는 것은 해킹 및 데이터 유출을 방지하는 데 필수적입니다. Ubuntu 22.04에서는 방화벽 설정, SSH 보안 강화, 그리고 Fail2Ban을 이용한 침입 방어를 설정할 수 있습니다.

1️⃣ 방화벽 설정 (UFW)

UFW(Uncomplicated Firewall)는 Ubuntu의 기본 방화벽 도구로, 불필요한 외부 접근을 차단할 수 있습니다.

📌 방화벽 규칙을 추가하는 명령어:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow OpenSSH
sudo ufw enable

default deny incoming : 기본적으로 모든 외부 접근 차단
default allow outgoing : 서버에서 나가는 모든 트래픽 허용
allow 80/tcp : HTTP 트래픽 허용
allow 443/tcp : HTTPS 트래픽 허용
allow OpenSSH : SSH 접속 허용
enable : 방화벽 활성화

적용된 방화벽 규칙을 확인하려면 다음 명령어를 실행하세요.

sudo ufw status verbose

2️⃣ SSH 보안 강화

기본 SSH 설정은 공격자에게 취약할 수 있으므로 몇 가지 보안 설정을 적용해야 합니다.

📌 설정할 파일: `/etc/ssh/sshd_config`
수정 명령어:

sudo nano /etc/ssh/sshd_config

다음 내용을 변경하거나 추가합니다:

PermitRootLogin no
MaxAuthTries 3
PasswordAuthentication no
AllowUsers yourusername

PermitRootLogin no : 루트 계정으로 SSH 로그인 차단
MaxAuthTries 3 : SSH 로그인 시도 제한 (3회 이상 실패 시 차단)
PasswordAuthentication no : SSH 키 인증만 허용하여 비밀번호 기반 로그인 차단
AllowUsers yourusername : 특정 사용자만 SSH 접속 가능하도록 제한

설정 변경 후 SSH 서비스를 다시 시작합니다.

sudo systemctl restart ssh

3️⃣ Fail2Ban 설정 (SSH 공격 방어)

Fail2Ban은 반복적인 로그인 실패 시 특정 IP를 차단하여 SSH 공격을 방어할 수 있습니다.

📌 설정할 파일: `/etc/fail2ban/jail.local`
수정 명령어:

sudo nano /etc/fail2ban/jail.local

다음 설정을 추가합니다:

[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 600
bantime = 3600

enabled = true : SSH 공격 방어 활성화
maxretry = 5 : 5회 로그인 실패 시 차단
findtime = 600 : 10분(600초) 동안 5회 이상 로그인 실패 시 차단
bantime = 3600 : 차단된 IP를 1시간(3600초) 동안 접근 금지

Fail2Ban을 활성화하고 실행합니다.

sudo systemctl enable --now fail2ban

Fail2Ban이 정상적으로 동작하는지 확인하려면 다음 명령어를 실행하세요.

sudo fail2ban-client status sshd

4️⃣ 자동 보안 업데이트 활성화

서버 보안을 유지하려면 보안 패치를 자동으로 적용하는 것이 중요합니다.

📌 자동 업데이트를 활성화하는 명령어:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades

이 명령어를 실행하면 보안 패치가 자동으로 업데이트되도록 설정됩니다.


이제 보안 및 방화벽 설정이 완료되었습니다! 🚀

SSL 인증서 적용 (HTTPS 설정)

웹사이트 보안을 강화하고 SEO에도 긍정적인 영향을 주기 위해 SSL 인증서를 적용하는 것이 중요합니다. Let’s Encrypt를 사용하면 무료 SSL 인증서를 쉽게 설정할 수 있습니다.

1️⃣ Certbot 설치 및 SSL 인증서 발급

Certbot을 사용하여 자동으로 SSL 인증서를 발급하고 Nginx에 적용할 수 있습니다.

📌 Certbot 설치 명령어:

sudo apt install certbot python3-certbot-nginx -y

📌 SSL 인증서 발급 명령어:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

설치 과정에서 다음과 같은 질문이 나옵니다:

  • 이메일 주소 입력: 인증서 갱신 및 보안 관련 알림을 받기 위한 이메일을 입력합니다.
  • Let’s Encrypt 서비스 약관 동의: ‘Y’를 입력하여 동의합니다.
  • HTTP를 HTTPS로 자동 리디렉션: HTTPS 강제 적용을 위해 ‘2’를 선택합니다.

2️⃣ Nginx SSL 설정

SSL 인증서가 정상적으로 발급되면 Nginx 설정을 수정하여 HTTPS를 적용할 수 있습니다.

📌 설정할 파일: `/etc/nginx/sites-available/default`
수정 명령어:

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

다음 내용을 추가하거나 수정합니다:

server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

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

3️⃣ HTTPS 리디렉션 설정

HTTP 요청을 자동으로 HTTPS로 리디렉션하려면 다음 설정을 추가합니다.

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

4️⃣ 변경 사항 적용

이제 Nginx 설정을 다시 로드하여 변경 사항을 적용합니다.

sudo nginx -t
sudo systemctl reload nginx

sudo nginx -t : 설정 파일에 오류가 없는지 확인합니다.
sudo systemctl reload nginx : 변경 사항을 적용합니다.

설정이 정상적으로 적용되었는지 확인하려면 웹사이트에 접속하여 HTTPS가 정상적으로 작동하는지 확인하세요.

5️⃣ SSL 인증서 자동 갱신 설정

Let’s Encrypt 인증서는 90일마다 만료되므로 자동 갱신을 설정해야 합니다.

📌 자동 갱신 테스트 명령어:

sudo certbot renew --dry-run

📌 크론잡을 추가하여 자동 갱신 설정:

sudo crontab -e

파일의 마지막에 다음 줄을 추가합니다:

0 3 * * * certbot renew --quiet

이 설정은 매일 새벽 3시에 SSL 인증서를 자동 갱신하도록 설정합니다.


이제 SSL 인증서가 적용되어 웹사이트가 HTTPS로 안전하게 운영됩니다! 🚀

이제 서버 최적화 작업이 모두 완료되었습니다! 🎉

Ubuntu 22.04 환경에서 Nginx, PHP 8.2, MariaDB 등의 주요 구성 요소를 최적화하고, 보안 설정 및 SSL 인증서를 적용하여 더욱 빠르고 안전한 서버를 구축할 수 있었습니다.

✅ 최적화된 서버 환경의 핵심 포인트

  • Ubuntu 기본 최적화 – 시스템 리소스 관리 및 커널 설정 최적화
  • Nginx 최적화 – 동시 연결 수 증가 및 Gzip 압축 활성화
  • PHP 8.2 최적화 – Opcache 설정 및 PHP-FPM 프로세스 최적화
  • MariaDB 최적화 – InnoDB 버퍼 크기 조정 및 Query Cache 활성화
  • 보안 및 방화벽 설정 – UFW, SSH 보안 강화 및 Fail2Ban 설정
  • SSL 인증서 적용 – HTTPS 활성화 및 Let’s Encrypt 자동 갱신 설정

🔹 앞으로 할 수 있는 추가 최적화

  • 서버 모니터링 도구 설치 (Netdata, Prometheus, Grafana 등)
  • 자동 백업 및 복구 시스템 구축
  • Docker 기반 컨테이너 환경으로 전환

서버 최적화는 한 번만 설정하고 끝나는 것이 아니라, 지속적으로 모니터링하고 조정하는 과정이 필요합니다. 💡

혹시 추가적으로 궁금한 점이 있거나 더 최적화하고 싶은 부분이 있다면 언제든지 문의해 주세요! 🚀


✅ 서버 최적화가 완료되었습니다! 🎉

이제 서버가 안정적으로 운영될 수 있도록 지속적인 관리와 모니터링을 진행하면 됩니다. 😉

Nginx + WordPress 설치 및 추가 최적화, 추천 플러그인 바로가기

Leave a Comment