Nginx란? 개념부터 실전 사용법까지 정리
Nginx(엔진엑스)는 고성능 웹 서버이자 리버스 프록시, 로드 밸런서, 캐시 서버 등의 역할을 수행하는 오픈 소스 소프트웨어입니다. 초기에는 HTTP 서버로 개발되었으나, 현재는 다양한 네트워크 프로토콜을 처리할 수 있도록 확장되었습니다.
1. Nginx의 주요 기능
1) 웹 서버(Web Server)
- 정적 파일(HTML, CSS, JS, 이미지 등) 제공에 최적화됨
- 높은 동시 접속 처리 성능 제공
2) 리버스 프록시(Reverse Proxy)
- 클라이언트 요청을 실제 애플리케이션 서버(Node.js, Django 등)로 전달
- 보안 강화 및 SSL 종료(TLS Offloading) 기능 제공
3) 로드 밸런서(Load Balancer)
- 여러 애플리케이션 서버로 요청을 분산하여 성능 최적화
4) 캐시 서버(Cache Server)
- 정적 콘텐츠 및 응답을 캐싱하여 성능 향상
5) HTTP/HTTPS 처리
- SSL/TLS 암호화를 통한 보안 강화 가능
6) WebSocket 및 gRPC 지원
- 실시간 데이터 전송을 위한 WebSocket 및 gRPC 트래픽 처리 가능
2. Nginx vs. Apache
특징 | Nginx | Apache |
---|---|---|
처리 방식 | 비동기 이벤트 기반 | 멀티스레드 기반 |
성능 | 높은 동시 접속 처리 | 요청 증가 시 성능 저하 가능 |
정적 파일 처리 | 빠름 | 상대적으로 느림 |
설정 파일 | 직관적 (nginx.conf ) |
모듈화된 설정 (.htaccess ) |
확장성 | 리버스 프록시, 로드 밸런싱 기본 지원 | 모듈을 통해 확장 |
메모리 사용량 | 낮음 | 상대적으로 높음 |
3. Nginx 기본 사용법
1) Nginx 설치 (Ubuntu 기준)
sudo apt update
sudo apt install nginx -y
2) Nginx 서비스 관리
sudo systemctl start nginx # 시작
sudo systemctl stop nginx # 중지
sudo systemctl restart nginx # 재시작
sudo systemctl status nginx # 상태 확인
3) 기본 설정 파일 (nginx.conf
)
worker_processes auto;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}
4. Nginx 리버스 프록시 설정 (MERN 스택 예제)
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sudo nginx -t # 설정 확인
sudo systemctl restart nginx # Nginx 재시작
5. HTTPS 설정 (Let’s Encrypt 무료 SSL)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
SSL 인증서를 자동 갱신하도록 설정:
sudo certbot renew --dry-run
6. Nginx 로드 밸런싱 설정
upstream backend_servers {
server 192.168.1.10:5000;
server 192.168.1.11:5000;
server 192.168.1.12:5000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
}
}
7. 정적 파일 제공 설정
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
location /images/ {
root /var/www/static/;
}
}
8. Nginx 로깅 설정
로그 파일 위치
- 접속 로그:
/var/log/nginx/access.log
- 에러 로그:
/var/log/nginx/error.log
로그 포맷 변경 (nginx.conf
)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
9. 결론
Nginx는 가볍고 성능이 뛰어난 웹 서버로, MERN 스택, Express, Next.js, React 등과 함께 배포할 때 유용합니다.
🚀 배포 시 Nginx를 활용하면 더 안정적이고 효율적인 서버 구성을 할 수 있습니다!
Leave a comment