Node.js · 2026-03-10

Nginx로 Node.js 성능·보안 개선하기

Nginx를 리버스 프록시로 구성하여 Node.js 애플리케이션의 요청 처리와 보안을 개선하는 방법, WebSocket 프록시 설정과 배포 시 고려사항을 포함한 기술자료

작성일 : 2026-03-10 ㆍ 작성자 : 관리자
post
목차

서론: 왜 Nginx를 앞단에 둘까?

Node.js는 비동기 처리에 강하지만, 정적 파일 제공·연결 관리·보안 필터링 같은 역할은 별도의 웹서버가 더 효율적이다. Nginx를 리버스 프록시로 두면 로드 분산, TLS 종료, 캐시, 그리고 느린 클라이언트로부터의 보호가 가능하다. 특히 Nginx Node.js 리버스 프록시 설정은 간단하면서도 효과가 크다.

기본 구성 개념

역방향 프록시와 역할 분담

일반적인 구성은 Nginx가 클라이언트 요청을 받아 SSL 종료와 정적 파일을 처리하고, 동적 요청은 내부의 Node.js 프로세스로 전달하는 구조다. 이렇게 하면 Node.js는 애플리케이션 로직에만 집중할 수 있다.

성능 관점에서의 이점

  • 정적 파일 캐싱으로 I/O 부담 감소
  • keepalive와 connection pool로 연결 재사용
  • gzip 압축과 브라우저 캐시 제어로 대역폭 절약
  • 로드 밸런싱으로 수평 확장 지원

실습: 기본 Nginx 설정 예시

아래 예시는 도메인 기반의 리버스 프록시 설정이다. 이 구성은 일반적인 웹 요청을 Node.js로 포워딩하고, 정적 파일은 Nginx가 직접 제공한다.

server {
  listen 80;
  server_name example.com;

  root /var/www/html;
  index index.html;

  location /static/ {
    alias /var/www/html/static/;
    expires 7d;
    add_header Cache-Control "public";
  }

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    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;
    proxy_set_header Connection "";
    proxy_buffering off;
  }
}

WebSocket 연결 처리

Node.js 앱에서 실시간 통신을 쓴다면 Nginx 프록시 WebSocket 설정이 필요하다. 헤더 업그레이드와 연결 유지를 올바르게 전달해야 한다.

location /ws/ {
  proxy_pass http://127.0.0.1:3000;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
  proxy_set_header Host $host;
  proxy_read_timeout 86400;
}

보안 및 안정성 설정

TLS 종료와 HSTS

Nginx에서 TLS를 종료하면 Node는 내부 통신만 처리하도록 단순화된다. HSTS와 안전한 TLS 설정을 적용해 중간자 공격을 줄인다.

클라이언트 제한과 요청 크기

  • client_max_body_size로 업로드 크기 제한
  • rate limiting으로 과도한 요청 차단
  • proxy_read_timeout, proxy_connect_timeout으로 느린 연결 보호

배포: Node 뒤에 Nginx 배포설정

운영 환경에서는 systemd나 PM2 같은 프로세스 매니저로 Node를 실행하고, Nginx는 80/443 포트를 담당한다. 기본 절차는 다음과 같다.

  • Node 프로세스는 로컬 포트(예: 3000)에서 실행
  • Nginx가 퍼블릭 트래픽을 받아 프록시 패스
  • 로그와 메트릭은 분리해 모니터링
[Unit]
Description=Example Node App
After=network.target

[Service]
Environment=PORT=3000
Type=simple
User=www-data
WorkingDirectory=/home/deploy/app
ExecStart=/usr/bin/node /home/deploy/app/index.js
Restart=always

[Install]
WantedBy=multi-user.target

운영과 문제 해결

접속 문제 발생 시 Nginx 로그(/var/log/nginx/error.log, access.log)를 먼저 확인한다. 502 Bad Gateway는 보통 Node 프로세스 비실행 또는 포트 불일치가 원인이다. WebSocket 연결 문제는 Upgrade 헤더와 proxy_http_version 설정을 점검한다.

마무리

Nginx 리버스 프록시를 도입하면 Nginx Node.js 리버스 프록시 설정을 통해 성능, 보안, 확장성 측면에서 실질적인 개선을 얻을 수 있다. Nginx 프록시 WebSocket 설정과 Node 뒤에 Nginx 배포설정을 함께 고려하면 실시간 기능과 운영 안정성 모두 만족하는 환경을 구성할 수 있다.

Nginx Node.js 리버스 프록시 설정 Nginx 프록시 WebSocket 설정 Node 뒤에 Nginx 배포설정 Nginx 설정 예시 Node.js 배포 리버스 프록시 보안 WebSocket 프록시 성능 최적화