liminfo

Nginx Reference

Nginx 웹 서버 레퍼런스

26개 결과

Nginx Reference 소개

Nginx 레퍼런스는 실제 프로덕션 배포에 사용되는 주요 Nginx 설정 지시어를 모두 다루는 치트 시트입니다. 서버블록 섹션에서는 listen, 와일드카드 및 정규식 패턴을 지원하는 server_name, root와 index 지시어, 그리고 커스텀 error_page 처리를 다룹니다. 가상 호스트 정의, 문서 루트 설정, 404/5xx 에러 응답 방법을 공식 문서를 뒤지지 않고 즉시 확인할 수 있습니다.

location과 proxy 섹션은 이 레퍼런스의 핵심입니다. location 블록은 프리픽스 매칭, ~를 사용한 정규식 매칭, =를 사용한 정확한 매칭, SPA 라우팅을 위한 try_files 지시어를 다룹니다. proxy 섹션은 적절한 헤더 전달(Host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto)을 포함한 proxy_pass 설정, upstream 서버 그룹 정의, proxy_redirect를 보여줍니다. SSL/TLS 설정에는 Let's Encrypt 인증서 경로, TLSv1.2 및 TLSv1.3으로 제한된 ssl_protocols, 암호화 스위트 강화, HTTP에서 HTTPS로의 301 리다이렉트, 성능을 위한 ssl_session_cache가 포함됩니다.

로드밸런싱과 캐싱이 레퍼런스를 완성합니다. upstream 모듈은 라운드 로빈(기본값), 연결 수를 고려한 least_conn, 세션 고정을 위한 ip_hash, weight= 파라미터를 사용한 가중치 기반 백엔드로 문서화되어 있습니다. 캐시 설정은 디스크 기반 캐싱을 위한 proxy_cache_path, proxy_cache_valid를 이용한 상태별 TTL 설정, 정적 자산을 위한 브라우저 expires 헤더, Cache-Control 헤더 조작을 포함합니다. 이 레퍼런스는 Nginx 뒤에서 Node.js, Python, PHP 앱을 배포하는 DevOps 엔지니어, 시스템 관리자, 백엔드 개발자가 활용합니다.

주요 기능

  • 서버블록 지시어 — listen, server_name(와일드카드·정규식), root, index, error_page
  • location 블록 — 프리픽스, 정규식(~), 정확매칭(=), SPA 라우팅을 위한 try_files
  • 리버스 프록시 설정 — Host·X-Real-IP·X-Forwarded-For 헤더 포함 proxy_pass
  • upstream 서버 그룹 — 라운드로빈, least_conn, ip_hash, weight= 로드밸런싱
  • SSL/TLS 설정 — Let's Encrypt 경로, TLSv1.2/1.3, 암호화 강화, 세션 캐시
  • return 301 지시어를 이용한 HTTP→HTTPS 리다이렉트
  • proxy_cache_path와 proxy_cache_valid를 이용한 프록시 캐싱 및 상태별 TTL 제어
  • expires 지시어와 Cache-Control 헤더로 정적 자산 브라우저 캐싱 설정

자주 묻는 질문

Nginx 서버블록이란 무엇이고 어떻게 동작하나요?

서버블록은 Apache의 VirtualHost에 해당하는 Nginx 개념으로, 특정 도메인이나 IP:포트 조합에 대한 요청 처리 방식을 정의합니다. Nginx는 Host 헤더를 server_name 값과 비교해 일치하는 서버블록을 선택합니다. 같은 설정 파일에 여러 서버블록을 정의해 하나의 서버에서 여러 도메인을 호스팅할 수 있습니다. 각 블록은 자체 root, listen, location 지시어를 가집니다.

Node.js 앱을 위한 Nginx 리버스 프록시 설정 방법은?

location 블록 안에 앱의 로컬 포트를 가리키는 proxy_pass 지시어를 사용합니다. 원본 클라이언트를 식별할 수 있도록 Host, X-Real-IP, X-Forwarded-For 헤더를 전달하는 proxy_set_header 지시어를 반드시 추가하세요. 예: location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }. WebSocket 지원을 위해서는 proxy_http_version 1.1과 Upgrade/Connection 헤더 설정을 추가하세요.

proxy_pass와 try_files의 차이는 무엇인가요?

proxy_pass는 요청을 백엔드 서버(Node.js나 PHP-FPM 등)로 전달합니다. try_files는 파일이나 디렉토리가 디스크에 실제로 존재하는지 확인하고 직접 제공하며, 아무것도 없으면 마지막 URI나 상태 코드로 폴백합니다. SPA에 이상적입니다: try_files $uri $uri/ /index.html을 사용하면 정적 파일과 일치하지 않는 모든 라우트에 index.html을 제공해 클라이언트 사이드 라우터가 처리하도록 합니다.

Nginx에서 Let's Encrypt SSL 설정 방법은?

certbot --nginx로 자동으로 인증서를 얻고 설정하거나, ssl_certificate를 fullchain.pem 경로로, ssl_certificate_key를 privkey.pem으로 수동 설정합니다. HTTPS로 301 리다이렉트하는 별도의 HTTP 서버블록을 추가하세요. ssl_protocols는 TLSv1.2 TLSv1.3으로 설정하고 ssl_ciphers에서 취약한 알고리즘을 제외합니다. 재접속 클라이언트의 핸드셰이크 성능 향상을 위해 ssl_session_cache shared:SSL:10m을 활성화하세요.

Nginx 로드밸런싱은 어떻게 동작하나요?

upstream 블록에 여러 서버 항목을 정의합니다. 기본적으로 Nginx는 라운드 로빈을 사용해 각 새 요청을 순서대로 다음 서버에 분배합니다. least_conn을 사용하면 활성 연결이 가장 적은 백엔드로 라우팅되어 오래 지속되는 요청에 더 적합합니다. ip_hash는 동일한 클라이언트 IP가 항상 동일한 백엔드에 도달하도록 하여 세션 유지에 유용합니다. weight=N을 추가하면 더 강력한 서버에 비례적으로 더 많은 트래픽을 보낼 수 있습니다.

Nginx 프록시 캐싱을 활성화하는 방법은?

먼저 proxy_cache_path로 디렉토리, 키 존 이름, 최대 크기를 지정해 캐시 존을 정의합니다. 그런 다음 location 블록에서 proxy_cache로 캐시를 활성화하고 proxy_cache_valid 200 60m으로 200 응답을 60분간 캐시합니다. 인증된 요청이나 동적 요청의 캐시를 건너뛰려면 proxy_cache_bypass와 proxy_no_cache 지시어를 사용하세요. add_header X-Cache-Status $upstream_cache_status를 추가하면 캐시 히트를 디버깅할 수 있습니다.

Nginx rewrite 지시어는 무엇을 하나요?

rewrite 지시어는 정규식과 대체 문자열을 사용해 요청 URI를 변경합니다. last 플래그는 추가 rewrite 규칙 처리를 중단하고 location 매칭을 재시작하며, permanent는 클라이언트에 301 리다이렉트를 발행합니다. 단순 리다이렉트에는 정규식 엔진을 건너뛰는 return 301 /new-path가 더 빠릅니다. 복잡한 URL 마이그레이션에는 rewrite가 캡처 그룹을 이용해 URL을 재구성하는 유연성을 제공합니다.

SPA(Single Page Application)를 위한 Nginx 설정 방법은?

루트 location 블록 안에 try_files $uri $uri/ /index.html을 사용합니다. 이렇게 하면 Nginx가 정확한 파일이 있는지, 디렉토리 인덱스가 있는지 확인한 후 index.html을 제공해 클라이언트 사이드 라우터가 경로를 처리하도록 합니다. API 라우트는 catch-all 앞에 더 구체적인 location 블록으로 매칭해 API 요청이 백엔드로 프록시되도록 해야 합니다.