🚀 Nginx란?
Nginx(엔진엑스)는 고성능 웹 서버이자 리버스 프록시, 로드 밸런서, HTTP 캐시 등으로 활용되는 오픈소스 소프트웨어입니다. 2004년 러시아 개발자 이고르 시쇼브가 C10K 문제(동시 1만 연결 처리)를 해결하기 위해 개발했으며, 현재 전 세계 웹 트래픽의 40% 이상을 담당할 정도로 핵심 인프라로 자리잡았습니다.
⚙️ 핵심 특징 & 장점
-
이벤트 기반 비동기 아키텍처
- 동작 원리:
graph LR A[클라이언트 요청] --> B[Master Process] B --> C[Worker Process 1] B --> D[Worker Process 2] C --> E[Non-blocking I/O] D --> F[Non-blocking I/O]
- 스레드/프로세스당 연결이 아닌, 단일 프로세스가 수천 개 연결을 논블로킹 방식으로 처리 → 적은 리소스로 높은 동시성 지원.
- Apache의 Prefork MPM 대비 메모리 1/5, 처리 속도 2배 이상 효율적입니다.
- 동작 원리:
-
다용도 미들웨어
- 웹 서버: 정적 파일(HTML, 이미지) 초고속 전송.
- 리버스 프록시:
location / { proxy_pass http://backend_server; # WAS(예: Node.js)로 요청 전달 }
- 로드 밸런서:
upstream myapp { server 10.0.0.1 weight=3; # 가중치 부여 server 10.0.0.2; }
- SSL/TLS 종료: HTTPS 복호화 후 백엔드로 평문 전송.
-
동적 모듈 시스템
- 필요 기능만 선택적 로딩 가능 (예:
nginx-module-image-filter
).
- 필요 기능만 선택적 로딩 가능 (예:
🛠️ 주요 사용 사례
용도 | 설명 | 예시 구성 코드 |
---|---|---|
정적 콘텐츠 서빙 | 이미지, CSS, JS 제공 | root /var/www/html; |
API 게이트웨이 | 마이크로서비스 라우팅 | location /api { proxy_pass http://api_servers; } |
부하 분산 | 트래픽을 여러 서버에 분산 | upstream { least_conn; server app1:8080; } |
DDoS 방어 | 요청 수 제한 | limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; |
📝 기본 설정 가이드 (Ubuntu 기준)
-
설치
sudo apt update sudo apt install nginx
-
핵심 설정 파일 구조
/etc/nginx/nginx.conf
: 메인 설정/etc/nginx/sites-available/
: 가상 호스트 템플릿/etc/nginx/sites-enabled/
: 활성화된 호스트 (symlink)
-
간단한 정적 서버 예제
server { listen 80; server_name example.com; root /var/www/example; # 정적 파일 경로 location / { index index.html; } location ~* \.(jpg|png)$ { # 이미지 캐싱 expires 30d; } }
-
설정 검증 & 재시작
sudo nginx -t # 테스트 sudo systemctl restart nginx
🔍 고급 기능 활용법
-
캐싱 가속화
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m; location / { proxy_cache my_cache; proxy_pass http://backend; }
- 자주 접근하는 콘텐츠를 메모리/디스크에 저장해 응답 속도 ⬆️
-
WebSocket 프록시
location /chat/ { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://websocket_backend; }
-
보안 강화
add_header X-Frame-Options DENY; # 클릭재킹 방지 ssl_protocols TLSv1.2 TLSv1.3; # 구형 프로토콜 차단
💡 Nginx vs Apache
항목 | Nginx | Apache |
---|---|---|
연결 모델 | 비동기 이벤트 기반 | 스레드/프로세스 기반 |
정적 파일 성능 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
동적 콘텐츠 | 외부 프로세스에 의존 (예: PHP-FPM) | 모듈 내장 처리 |
구성 파일 | 선언적 구조 | .htaccess 복잡성 |
🎯 결론: 왜 Nginx인가?
- 빠르고 가볍다: 하드웨어 비용 절감 ⬇️
- 유연하다: 마이크로서비스, 클라우드 환경에 최적화 ☁️
- 안전하다: 대규모 트래픽과 보안 위협에 강함 🛡️
> “Nginx는 현대 웹 인프라의 숨은 허리입니다. 단순한 웹 서버를 넘어, 전체 시스템의 성능과 안정성을 책임지는 핵심 엔진으로 자리매김했습니다.”
초보자도 nginx.conf
한 줄씩 수정해가며 시작해보세요! 🚀
➜ 공식 문서 | ➜ 구성 생성기