nginx 란? 웹서버부터 리버스 프록시까지 한 번에 정리 (개발자용)

운영을 하다 보면 “서버는 잘 떠 있는데 왜 접속이 느리지?”, “HTTPS는 어디서 붙이지?”, “프론트와 백엔드를 같은 도메인으로 묶고 싶은데?” 같은 고민이 생깁니다. 이때 거의 항상 등장하는 해답이 nginx입니다. nginx(엔진엑스)는 웹서버로도 쓰이고, 리버스 프록시로도 쓰이고, 로드밸런서로도 쓰이는 인프라 기본기 도구입니다.


빠른 체크포인트

  • nginx는 정적 파일을 빠르게 서빙하는 웹서버 역할을 합니다.
  • nginx는 앞단에서 요청을 받아 뒤쪽 서버로 전달하는 리버스 프록시 역할을 합니다.
  • nginx는 여러 서버로 트래픽을 나눠주는 로드밸런싱도 가능합니다.
  • nginx에 SSL(HTTPS) 인증서를 붙여서 보안과 운영 구성을 단순화할 수 있습니다.
  • 캐싱, 압축, 레이트리밋 같은 운영 기능을 nginx에서 처리하면 백엔드가 훨씬 편해집니다.

1. nginx의 정체: “앞단 게이트웨이” 역할

nginx를 한 문장으로 말하면 “사용자 요청이 들어오는 첫 관문”입니다. 브라우저나 앱은 nginx에 접속하고, nginx가 상황에 따라 정적 파일은 직접 응답하고 API 요청은 백엔드(Spring/Node 등)로 넘깁니다. 그래서 nginx와 리버스 프록시는 거의 세트처럼 같이 언급됩니다.


2. nginx가 하는 대표 역할 5가지

2-1) 웹서버(정적 파일 서버)

nginx는 HTML, CSS, JS, 이미지 같은 정적 파일을 매우 효율적으로 제공합니다. 정적 리소스는 백엔드까지 보내지 않고 nginx가 바로 응답하는 편이 성능상 유리합니다.

2-2) 리버스 프록시(Reverse Proxy)

리버스 프록시는 “사용자 요청을 받아서 내부 서버로 전달하는 중계자”입니다. nginx를 리버스 프록시로 두면 외부에 공개되는 포트/도메인을 nginx로 통일하고, 내부 서비스들은 사설 네트워크에서 마음대로 구성할 수 있습니다. 운영에서 nginx 리버스 프록시를 쓰는 가장 큰 이유가 여기입니다.

2-3) 로드밸런싱(Load Balancing)

백엔드 서버가 여러 대라면 nginx가 요청을 분산할 수 있습니다. 단순 라운드로빈부터 헬스체크와 특정 방식의 분산도 구성 가능합니다.

2-4) SSL/TLS(HTTPS) 종료 지점

HTTPS 인증서를 nginx에 붙이고, 내부 서비스는 HTTP로 두는 구성이 흔합니다. 이 방식은 운영이 단순해지고, 인증서 갱신도 nginx 한 군데에서 처리하면 됩니다.

2-5) 캐싱/압축/레이트리밋 같은 운영 옵션

gzip 압축, 캐시 제어, 접근 제어, 특정 IP 차단, 요청 제한(레이트리밋) 같은 것들을 nginx에서 처리하면 백엔드 코드는 단순해지고 트래픽 대응력이 좋아집니다.


3. 가장 흔한 실무 구성 예시 3개

예시 A) 프론트(Next.js) + 백엔드(Spring) 프록시

  • / 경로는 프론트로
  • /api 경로는 백엔드로 이 구성이 “nginx 리버스 프록시”의 대표 사용 사례입니다.

예시 B) 단일 도메인에 여러 서비스 붙이기

  • api.example.com → Spring
  • admin.example.com → Admin 서버
  • static.example.com → 정적 파일 nginx에서 host 기준으로 나눠 라우팅합니다.

예시 C) Docker/Compose에서 입구만 nginx로 열기

컨테이너들은 내부 네트워크에서만 통신하고, 외부 공개는 nginx(80/443)만 열어두는 방식입니다.


4. nginx 설정 예시(리버스 프록시 기본)

아래는 “/api는 백엔드로, 나머지는 프론트로” 보내는 전형적인 nginx 리버스 프록시 예시입니다.

server {
  listen 80;
  server_name example.com;

  # /api 요청은 백엔드로 전달
  location /api/ {
    proxy_pass http://spring:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  # 그 외는 프론트(예: Next.js)로 전달
  location / {
    proxy_pass http://next:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

이 설정이 익숙해지면 nginx는 “리버스 프록시 라우터”로 이해하는 게 가장 빠릅니다. nginx를 리버스 프록시로 두면 도메인과 포트를 단순화할 수 있고, 내부 서비스 구조 변경에도 외부는 그대로 유지됩니다.


5. 운영에서 자주 겪는 문제와 해결 힌트

5-1) 업로드가 큰데 413 에러가 난다

nginx 기본 업로드 제한에 걸리는 경우가 많습니다.

client_max_body_size 20m;

5-2) 실제 사용자 IP가 백엔드에서 안 보인다

리버스 프록시 헤더를 제대로 넘겨야 합니다. 위 예시의 X-Forwarded-For, X-Real-IP가 핵심입니다.

5-3) HTTPS 적용 위치가 헷갈린다

인증서를 nginx에 붙이고 내부는 HTTP로 두는 구성이 가장 단순합니다. 이때 백엔드에서는 “원래 HTTPS 요청이었는지”를 X-Forwarded-Proto로 판단하는 경우가 많습니다.


6. 정리

nginx 란 무엇이냐고 물으면 “웹서버이자 리버스 프록시이자 로드밸런서”라고 답할 수 있습니다. 특히 nginx 리버스 프록시는 프론트/백엔드 분리, 도메인 통합, HTTPS 처리, 트래픽 대응까지 한 번에 해결해주는 운영의 기본기입니다. 프로젝트가 커질수록 nginx는 거의 필수처럼 등장하니, 먼저 리버스 프록시 관점에서 익히는 것을 추천합니다.


FAQ

Q1. nginx와 Apache는 뭐가 달라요?

둘 다 웹서버지만, nginx는 이벤트 기반 구조로 대량 동시접속 처리에 강하다고 많이 알려져 있고, 운영에서 리버스 프록시로 널리 쓰입니다.

Q2. nginx는 꼭 설치해야 하나요?

클라우드 로드밸런서나 CDN을 쓰면 nginx 없이도 되는 경우가 있지만, 서비스 내부 라우팅과 HTTPS 종료, 프록시 정책을 세밀하게 가져가려면 nginx가 여전히 자주 선택됩니다.


원하면 네 환경 기준으로 “Next.js + Spring Boot + Docker Compose” 구성에서 바로 붙여 쓸 수 있는 nginx.conf, docker-compose 예시까지 묶어서 블로그 글 2편(입문편/실전편)으로 분리해줄게요.

메타데이터

  • Slug: nginx-what-is
  • Meta Title: nginx 란? 웹서버·리버스 프록시·로드밸런서 핵심 정리
  • Meta Description: nginx 란 무엇인지 웹서버, 리버스 프록시, 로드밸런서 관점에서 정리하고 실무에서 가장 많이 쓰는 설정 예시까지 한 번에 설명합니다.
  • Keywords: nginx, 리버스 프록시, 웹서버, 로드밸런싱, SSL, 캐싱, Docker
  • Canonical URL: https://moritail.com/nginx-what-is
  • Category: 개발
  • Tags: nginx, reverse-proxy, infra, devops, web

도입

운영을 하다 보면 “서버는 잘 떠 있는데 왜 접속이 느리지?”, “HTTPS는 어디서 붙이지?”, “프론트와 백엔드를 같은 도메인으로 묶고 싶은데?” 같은 고민이 생깁니다. 이때 거의 항상 등장하는 해답이 nginx입니다. nginx(엔진엑스)는 웹서버로도 쓰이고, 리버스 프록시로도 쓰이고, 로드밸런서로도 쓰이는 인프라 기본기 도구입니다.


빠른 체크포인트

  • nginx는 정적 파일을 빠르게 서빙하는 웹서버 역할을 합니다.
  • nginx는 앞단에서 요청을 받아 뒤쪽 서버로 전달하는 리버스 프록시 역할을 합니다.
  • nginx는 여러 서버로 트래픽을 나눠주는 로드밸런싱도 가능합니다.
  • nginx에 SSL(HTTPS) 인증서를 붙여서 보안과 운영 구성을 단순화할 수 있습니다.
  • 캐싱, 압축, 레이트리밋 같은 운영 기능을 nginx에서 처리하면 백엔드가 훨씬 편해집니다.

1. nginx의 정체: “앞단 게이트웨이” 역할

nginx를 한 문장으로 말하면 “사용자 요청이 들어오는 첫 관문”입니다. 브라우저나 앱은 nginx에 접속하고, nginx가 상황에 따라 정적 파일은 직접 응답하고 API 요청은 백엔드(Spring/Node 등)로 넘깁니다. 그래서 nginx와 리버스 프록시는 거의 세트처럼 같이 언급됩니다.


2. nginx가 하는 대표 역할 5가지

2-1) 웹서버(정적 파일 서버)

nginx는 HTML, CSS, JS, 이미지 같은 정적 파일을 매우 효율적으로 제공합니다. 정적 리소스는 백엔드까지 보내지 않고 nginx가 바로 응답하는 편이 성능상 유리합니다.

2-2) 리버스 프록시(Reverse Proxy)

리버스 프록시는 “사용자 요청을 받아서 내부 서버로 전달하는 중계자”입니다. nginx를 리버스 프록시로 두면 외부에 공개되는 포트/도메인을 nginx로 통일하고, 내부 서비스들은 사설 네트워크에서 마음대로 구성할 수 있습니다. 운영에서 nginx 리버스 프록시를 쓰는 가장 큰 이유가 여기입니다.

2-3) 로드밸런싱(Load Balancing)

백엔드 서버가 여러 대라면 nginx가 요청을 분산할 수 있습니다. 단순 라운드로빈부터 헬스체크와 특정 방식의 분산도 구성 가능합니다.

2-4) SSL/TLS(HTTPS) 종료 지점

HTTPS 인증서를 nginx에 붙이고, 내부 서비스는 HTTP로 두는 구성이 흔합니다. 이 방식은 운영이 단순해지고, 인증서 갱신도 nginx 한 군데에서 처리하면 됩니다.

2-5) 캐싱/압축/레이트리밋 같은 운영 옵션

gzip 압축, 캐시 제어, 접근 제어, 특정 IP 차단, 요청 제한(레이트리밋) 같은 것들을 nginx에서 처리하면 백엔드 코드는 단순해지고 트래픽 대응력이 좋아집니다.


3. 가장 흔한 실무 구성 예시 3개

예시 A) 프론트(Next.js) + 백엔드(Spring) 프록시

  • / 경로는 프론트로
  • /api 경로는 백엔드로 이 구성이 “nginx 리버스 프록시”의 대표 사용 사례입니다.

예시 B) 단일 도메인에 여러 서비스 붙이기

  • api.example.com → Spring
  • admin.example.com → Admin 서버
  • static.example.com → 정적 파일 nginx에서 host 기준으로 나눠 라우팅합니다.

예시 C) Docker/Compose에서 입구만 nginx로 열기

컨테이너들은 내부 네트워크에서만 통신하고, 외부 공개는 nginx(80/443)만 열어두는 방식입니다.


4. nginx 설정 예시(리버스 프록시 기본)

아래는 “/api는 백엔드로, 나머지는 프론트로” 보내는 전형적인 nginx 리버스 프록시 예시입니다.

server {
  listen 80;
  server_name example.com;

  # /api 요청은 백엔드로 전달
  location /api/ {
    proxy_pass http://spring:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  # 그 외는 프론트(예: Next.js)로 전달
  location / {
    proxy_pass http://next:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

이 설정이 익숙해지면 nginx는 “리버스 프록시 라우터”로 이해하는 게 가장 빠릅니다. nginx를 리버스 프록시로 두면 도메인과 포트를 단순화할 수 있고, 내부 서비스 구조 변경에도 외부는 그대로 유지됩니다.


5. 운영에서 자주 겪는 문제와 해결 힌트

5-1) 업로드가 큰데 413 에러가 난다

nginx 기본 업로드 제한에 걸리는 경우가 많습니다.

client_max_body_size 20m;

5-2) 실제 사용자 IP가 백엔드에서 안 보인다

리버스 프록시 헤더를 제대로 넘겨야 합니다. 위 예시의 X-Forwarded-For, X-Real-IP가 핵심입니다.

5-3) HTTPS 적용 위치가 헷갈린다

인증서를 nginx에 붙이고 내부는 HTTP로 두는 구성이 가장 단순합니다. 이때 백엔드에서는 “원래 HTTPS 요청이었는지”를 X-Forwarded-Proto로 판단하는 경우가 많습니다.


6. 정리

nginx 란 무엇이냐고 물으면 “웹서버이자 리버스 프록시이자 로드밸런서”라고 답할 수 있습니다. 특히 nginx 리버스 프록시는 프론트/백엔드 분리, 도메인 통합, HTTPS 처리, 트래픽 대응까지 한 번에 해결해주는 운영의 기본기입니다. 프로젝트가 커질수록 nginx는 거의 필수처럼 등장하니, 먼저 리버스 프록시 관점에서 익히는 것을 추천합니다.


FAQ

Q1. nginx와 Apache는 뭐가 달라요?

둘 다 웹서버지만, nginx는 이벤트 기반 구조로 대량 동시접속 처리에 강하다고 많이 알려져 있고, 운영에서 리버스 프록시로 널리 쓰입니다.

Q2. nginx는 꼭 설치해야 하나요?

클라우드 로드밸런서나 CDN을 쓰면 nginx 없이도 되는 경우가 있지만, 서비스 내부 라우팅과 HTTPS 종료, 프록시 정책을 세밀하게 가져가려면 nginx가 여전히 자주 선택됩니다.