이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 1 Views
Nginx 베스트 프랙티스 최적화 가이드
실무에서 자주 사용되는 Nginx 설정과 최적화 방법을 초급자도 이해하기 쉽게 설명합니다. 성능 향상과 보안 강화를 위한 필수 설정들을 단계별로 알아봅니다.
들어가며
이 글에서는 Nginx 베스트 프랙티스 최적화 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 기본_서버_블록_설정
- Gzip_압축_활성화
- 리버스_프록시_설정
- 정적_파일_캐싱
- Rate_Limiting_설정
- SSL_HTTPS_설정
- 로드_밸런싱_설정
- 보안_헤더_추가
- 커넥션_타임아웃_최적화
- 로그_형식_커스터마이징
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