이미지 로딩 중...

Nginx 베스트 프랙티스 최적화 가이드 - 슬라이드 1/11
C

CodeDeck AI

2025. 11. 8. · 1 Views

Nginx 베스트 프랙티스 최적화 가이드

실무에서 자주 사용되는 Nginx 설정과 최적화 방법을 초급자도 이해하기 쉽게 설명합니다. 성능 향상과 보안 강화를 위한 필수 설정들을 단계별로 알아봅니다.


카테고리:JavaScript
언어:JavaScript
난이도:intermediate
메인 태그:#Nginx
서브 태그:
#ReverseProxy#LoadBalancing#Caching#Security

들어가며

이 글에서는 Nginx 베스트 프랙티스 최적화 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. 기본_서버_블록_설정
  2. Gzip_압축_활성화
  3. 리버스_프록시_설정
  4. 정적_파일_캐싱
  5. Rate_Limiting_설정
  6. SSL_HTTPS_설정
  7. 로드_밸런싱_설정
  8. 보안_헤더_추가
  9. 커넥션_타임아웃_최적화
  10. 로그_형식_커스터마이징

1. 기본_서버_블록_설정

개요

Nginx의 가장 기본이 되는 서버 블록 설정입니다. 포트와 서버 이름을 지정하고 정적 파일을 서빙합니다.

코드 예제

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

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

설명

80번 포트로 들어오는 요청을 받아서 /var/www/html 디렉토리의 파일을 제공합니다. 파일이 없으면 404 에러를 반환합니다.


2. Gzip_압축_활성화

개요

Gzip 압축을 활성화하여 네트워크 전송량을 줄이고 페이지 로딩 속도를 개선합니다.

코드 예제

http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json
               application/javascript text/xml;
}

설명

1KB 이상의 텍스트, CSS, JSON, JavaScript 파일을 압축하여 전송합니다. 브라우저가 자동으로 압축을 해제합니다.


3. 리버스_프록시_설정

개요

Nginx를 리버스 프록시로 사용하여 백엔드 애플리케이션 서버로 요청을 전달합니다.

코드 예제

location /api/ {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

설명

/api/로 시작하는 요청을 3000번 포트의 백엔드 서버로 전달하며, 클라이언트의 실제 IP와 호스트 정보를 함께 전달합니다.


4. 정적_파일_캐싱

개요

이미지, CSS, JavaScript 같은 정적 파일에 브라우저 캐싱을 설정하여 재방문 시 로딩 속도를 향상시킵니다.

코드 예제

location ~* \.(jpg|jpeg|png|gif|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

설명

이미지와 스타일, 스크립트 파일에 30일간 캐시를 유지하도록 설정합니다. 불필요한 로그 기록도 비활성화합니다.


5. Rate_Limiting_설정

개요

특정 IP에서 과도한 요청을 방지하여 DDoS 공격을 막고 서버를 보호합니다.

코드 예제

http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=mylimit burst=20;
        }
    }
}

설명

IP당 초당 10개 요청으로 제한하고, 순간적으로 최대 20개까지 허용합니다. 10MB 메모리로 약 16만 개의 IP를 추적합니다.


6. SSL_HTTPS_설정

개요

SSL 인증서를 적용하여 HTTPS 보안 연결을 활성화합니다. 모든 HTTP 요청을 HTTPS로 리다이렉트합니다.

코드 예제

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        root /var/www/html;
    }
}

설명

443 포트로 SSL 연결을 받고, TLS 1.2와 1.3 프로토콜만 허용하여 보안을 강화합니다.


7. 로드_밸런싱_설정

개요

여러 백엔드 서버에 트래픽을 분산하여 부하를 균등하게 나누고 가용성을 높입니다.

코드 예제

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

설명

3개의 백엔드 서버를 등록하고 라운드 로빈 방식으로 요청을 순차적으로 분배합니다.


8. 보안_헤더_추가

개요

보안 관련 HTTP 헤더를 추가하여 XSS, 클릭재킹 등의 공격을 방지합니다.

코드 예제

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000";

설명

iframe 삽입 방지, MIME 타입 스니핑 차단, XSS 필터 활성화, HTTPS 강제 사용 등 보안을 강화합니다.


9. 커넥션_타임아웃_최적화

개요

클라이언트 연결 유지 시간을 조절하여 서버 리소스를 효율적으로 관리합니다.

코드 예제

http {
    keepalive_timeout 65;
    client_body_timeout 12;
    client_header_timeout 12;
    send_timeout 10;
}

설명

Keep-Alive 연결은 65초, 요청 본문과 헤더는 12초, 응답 전송은 10초 타임아웃으로 설정하여 리소스 낭비를 방지합니다.


10. 로그_형식_커스터마이징

개요

액세스 로그에 더 많은 정보를 기록하여 트래픽 분석과 디버깅을 용이하게 합니다.

코드 예제

log_format custom '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status $body_bytes_sent '
                  '"$http_user_agent" $request_time';

access_log /var/log/nginx/access.log custom;

설명

클라이언트 IP, 요청 내용, 응답 상태, 전송 바이트, 브라우저 정보, 처리 시간을 모두 기록합니다.


마치며

이번 글에서는 Nginx 베스트 프랙티스 최적화 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Nginx #ReverseProxy #LoadBalancing #Caching #Security

#Nginx#ReverseProxy#LoadBalancing#Caching#Security#JavaScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.