Node.js 앱의 성능과 보안 강화를 위한 리버스 프록시 설정 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- Node.js 앱 배포 및 운영에 관심 있는 개발자
- 중급 이상의 DevOps 지식을 가진 개발자
- 확장성과 보안을 고려한 인프라 설계를 필요로 하는 팀
핵심 요약
- 리버스 프록시(Nginx/Apache)는 Node.js 앱의 부하 분산, SSL 종료, 보안 강화를 달성
- Nginx는 고성능, 저메모리로 고트래픽 앱에 적합
- Apache는 모듈 기반 유연성으로 복잡한 URL 리라이트나 레거시 시스템 통합에 적합
- SSL 종료는 Node.js의 CPU 부하를 줄이고 중앙 집중적 인증서 관리 가능
섹션별 세부 요약
1. Node.js의 한계와 리버스 프록시의 역할
- Node.js는 I/O 처리에 강하지만
- SSL/TLS 암호화, 트래픽 분산, 정적 파일 효율 처리, DDoS 방어 등에 취약
- 리버스 프록시는 트래픽 관리자(traffic cop) 역할 수행
- 요청 라우팅, SSL 종료, Node.js에 부하 분산
2. Nginx vs Apache 선택 기준
- Nginx
- 고성능, 저메모리 소비
- least_conn 알고리즘으로 최소 부하 인스턴스에 트래픽 분배
- Apache
- .htaccess 파일 기반 유연한 설정
- 모듈 생태계로 복잡한 리라이트 규칙 적용 가능
3. 리버스 프록시 구성 예시
- Nginx 구성 예
```nginx
upstream nodejs_cluster {
server localhost:3000;
server localhost:3001;
server localhost:3002;
least_conn;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://nodejs_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
- Apache 구성 예
```apache
BalancerMember http://localhost:3000
BalancerMember http://localhost:3001
BalancerMember http://localhost:3002
ProxySet lbmethod=bybusyness
ProxyPass / balancer://nodejs_cluster/
ProxyPassReverse / balancer://nodejs_cluster/
```
4. SSL 종료 설정
- Nginx
```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://nodejs_cluster;
proxy_set_header X-Forwarded-Proto https;
}
}
```
- Apache
```apache
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ [L,R=301]
```
5. 정적 파일 처리 및 WebSocket 지원
- 정적 파일 처리
```nginx
location /public {
root /path/to/static/files;
expires 30d;
}
```
- Socket.io WebSocket 지원
```nginx
location /socket.io/ {
proxy_pass http://nodejs_cluster;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
```
6. 보안 강화 조치
- Node.js 버전 헤더 숨기기
```nginx
proxy_hide_header X-Powered-By;
```
- 레이트 제한 설정
```nginx
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
```
- 보안 기능
- TLS 1.3 지원
- DDoS 방어
- HTTP 헤더 정리
결론
- 리버스 프록시(Nginx/Apache)는 Node.js 앱의 확장성, 보안, 성능을 극대화하는 핵심 도구
- SSL 종료, 트래픽 분산, 정적 파일 처리, WebSocket 지원을 통해 10배 이상의 트래픽 처리 가능
- Nginx는 성능, Apache는 유연성에 초점
- 1시간만 투자해도 앱이 기능적에서 보안 강화된 상태로 진화 가능