[Server] Nginx로 안전한 서버 구축하기(이론편): SSL 적용과 Reverse Proxy의 결합

gogori6565·2025년 12월 16일

Server / DevOps

목록 보기
4/5
post-thumbnail

'Nginx로 SSL과 Reverse Proxy 기능을 구현해보자' 라는 말을 처음 들었을 때 내 표정이 어땠는지 아직도 생생하다.
웹 서버를 구축하면서 뭐? 뭘 하자고요? 다시는 이런 의문이 안 생기게(생겨도 다시 배우게) 지금부터 정리해보자.

👩‍💼Nginx(엔진엑스) : 웹 트래픽의 현명한 관리자

Nginx는 웹 서버의 한 종류로, 사용자(클라이언트)의 요청을 가장 앞에서 받아 처리하는 소프트웨어이다.

✔️ Nginx의 특장점
기존의 전통적인 웹 서버(예: Apache 초기 모델)는 사용자 한 명이 접속할 때마다 별도의 일꾼(프로세스 또는 쓰레드)을 할당했다. 이 방식은 동시 접속자가 수백 명만 되어도 서버가 과부하로 멈추기 쉬웠다.

Nginx는 이와 달리 비동기/이벤트 기반(Event-Driven) 방식으로 작동한다. 한 명의 응대가 끝날 때까지 기다리지 않고, 여러 고객의 요청을 동시에 처리하도록 스케쥴링하는 것과 같다.

덕분에 Nginx는 매우 적은 자원(메모리)를 사용하면서도 수만 건의 동시 접속을 효율적으로 처리할 수 있는 고성능 웹 서버로 자리 잡았다.

✔️ Nginx의 주요 역할
Nginx는 단순한 웹 서버를 넘어, 우리가 구현한 것처럼 복합적인 역할을 수행한다.

  • 정적 콘텐츠 서비스: 이미지, HTML, CSS 파일 등 바뀌지 않는 파일을 빠르게 전송한다.
  • 리버스 프록시(Reverse Proxy): 뒤쪽에 있는 실제 애플리케이션 서버를 대신하여 요청을 받는다.
  • SSL/TLS 처리 (Termination): 암호화/복호화 작업을 대신 수행하여 실제 서버의 부담을 덜어준다.

Nginx는 자체 코드에 SSL/TLS 통신을 처리하는 모듈과 Reverse Proxy 기능을 수행하는 로직을 포함하고 있으므로, "Nginx라는 서버를 사용해서 SSL 기능과 Reverse Proxy 기능을 구현한다"고 이해하는 것이 가장 정확하다.


🔐SSL/TLS와 HTTPS : 안전한 통신을 위한 암호화 장치

웹사이트 접속의 기본 프로토콜인 HTTP는 데이터를 암호화하지 않은 평문으로 주고받는다.
만약 해커가 통신 중간을 가로채면 주고받은 모든 정보(로그인 정보, 결제 비밀번호 등)가 그대로 노출된다.

✔️ SSL/TLS의 역할
SSL(Secure Sockets Layer)과 그 후속 기술인 TLS(Transport Layer Security)는 이러한 위험을 막기 위해 개발되었다.
이 기술은 웹 서버와 클라이언트(브라우저) 사이에 오가는 모든 데이터를 암호화한다.

  • HTTPS: SSL/TLS 프로토콜을 HTTP에 적용한 형태. 주소창이 http:// 대신 https://로 시작하며, 브라우저에 자물쇠 모양 아이콘이 표시됨
  • 인증서의 기능: SSL 인증서는 서버의 신원을 증명하고, 암호화에 사용할 공개 키를 클라이언트에게 제공하는 역할을 함. 클라이언트는 이 공개 키로 데이터를 암호화하여 서버로 보내고, 서버는 자신만이 가진 개인 키로 복호화함
  • Let's Encrypt와 Certbot : 과거 SSL 인증서는 비쌌지만, Let's Encrypt 덕분에 누구나 무료로 인증서를 발급받을 수 있게 됨. Certbot은 이 인증서를 자동으로 설치하고 주기적으로 갱신해주는 편리한 도구임


리버스 프록시(Reverse Proxy) : 실제 서버를 보호하는 방패

나는 리버스 프록시를 들으면 왤캐 여우가 생각날까

프록시(Proxy)는 '대리인'이라는 뜻이다. 리버스 프록시는 서버의 대리인 역할을 수행한다.

리버스 프록시(Nginx)는 이 실제 서버 앞에 방패처럼 서 있다.

  1. 사용자는 실제 서버의 주소(예: 127.0.0.1:8080)가 아닌, Nginx의 주소(도메인)로 접속한다.
  2. Nginx는 요청을 받은 후, 이를 내부망에 있는 실제 서버(8080 포트)로 조용히 전달(proxy_pass)한다.
  3. 실제 서버가 요청을 처리하고 응답을 Nginx에게 돌려준다.
  4. Nginx는 이 응답을 받아 사용자에게 전달한다.

✔️ 리버스 프록시의 주요 장점

  • 보안 강화: 실제 애플리케이션 서버의 포트와 IP가 외부에 완전히 숨겨져 해킹이나 직접 공격의 위험을 줄임
  • SSL 처리 위임: 모든 암호화(HTTPS) 처리를 Nginx가 담당하므로, 실제 애플리케이션 서버는 비즈니스 로직(데이터 처리)에만 집중할 수 있어 성능 효율을 높임
  • 헤더 정보 전달의 중요성(proxy_set_header): 프록시를 거치면 실제 클라이언트의 IP 주소가 Nginx의 IP로 바뀌어버린다. 이를 방지하기 위해 X-Read-IP 등의 헤더를 설정해 사용자의 실제 IP 정보를 애플리케이션 서버에 정확히 전달해 주어야 로그 분석이 가능하다.


📄 이론편 요약!

Nginx는 고성능 웹 서버이자 리버스 프록시로, 사용자 요청을 받아 SSL/TLS 암호화 통신을 처리한 후, 실제 애플리케이션 서버(8080포트)를 숨기고 안전하게 요청을 전달하는 서버 보안의 핵심 역할을 수행하는 웹 서버이다!

  • Nginx (문지기/경호원): 주체이자 소프트웨어(도구) 자체
  • SSL/TLS (방패/암호화): Nginx가 처리하는 기술이자 프로토콜. Nginx는 SSL 인증서를 받아서, 클라이언트와의 통신에서 암호화/복호화(SSL Termination)를 전담하는 기능을 수행한다.
  • Reverse Proxy (장막): Nginx가 수행하는 역할이자 건축 패턴. Nginx는 요청을 받아 실제 서버로 전달하는 '리버스 프록시' 역할을 수행하도록 설정된 것이다.

참고 출처:
https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/
https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/

profile
나대로 열심히 하다보면 또 어딘가에 닿아있겠지 p(´∇`)q

0개의 댓글