Nginx 완벽 가이드
1. Nginx란?
Nginx는 웹 서버, 리버스 프록시, 로드 밸런서, 캐시 서버 역할을 수행하는 오픈소스 소프트웨어다. 높은 성능과 낮은 리소스 사용량으로 인해 대규모 트래픽을 처리하는 데 최적화되어 있으며, 특히 Apache보다 가벼운 구조를 가지고 있어 많은 웹 서비스에서 사용된다.
주요 특징
• 비동기 이벤트 기반 아키텍처
• 높은 동시 연결 처리 성능
• 리버스 프록시 기능 제공
• 로드 밸런싱 기능 지원
• 정적 콘텐츠(HTML, CSS, JS) 처리 최적화
• HTTP/2, gRPC, WebSocket 지원
• TLS/SSL을 통한 보안 강화
2. Nginx의 주요 기능
2.1 웹 서버
정적 콘텐츠(HTML, CSS, 이미지, JS)를 빠르게 제공하며, Apache보다 가벼운 리소스 사용으로 더 많은 요청을 처리할 수 있다.
설치 및 기본 설정 예제:
sudo apt update
sudo apt install nginx -y
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
sudo systemctl restart nginx
2.2 리버스 프록시
클라이언트의 요청을 백엔드 서버로 전달하고 응답을 반환하는 역할을 한다.
리버스 프록시 설정 예제:
server {
listen 80;
server_name mydomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2.3 로드 밸런싱
트래픽을 여러 서버로 분산하여 성능을 향상시키는 기능을 제공한다.
라운드 로빈 방식 예제:
upstream backend_servers {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
로드 밸런싱 알고리즘 종류:
• Round Robin: 기본값, 서버를 순차적으로 분배
• Least Connections: 연결 수가 적은 서버에 우선 배분
• IP Hash: 특정 클라이언트가 항상 같은 서버로 연결되도록 함
2.4 SSL/TLS 설정 (HTTPS 적용)
보안을 강화하기 위해 SSL/TLS를 설정할 수 있다.
Let’s Encrypt 무료 SSL 인증서 적용:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
수동으로 SSL 적용:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
2.5 캐시 서버
정적 파일을 캐시하여 서버 성능을 향상시킬 수 있다.
브라우저 캐싱 활성화:
location /static/ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
프록시 캐시 활성화:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://127.0.0.1:3000;
}
}
3. Nginx vs Apache 비교
비교 항목 |
Nginx |
Apache |
---|---|---|
아키텍처 |
비동기 이벤트 기반 |
멀티 스레드 기반 |
성능 |
높은 동시 처리 성능 |
연결 수 증가 시 성능 저하 |
리소스 사용량 |
적음 |
많음 |
정적 콘텐츠 처리 |
빠름 |
느림 |
동적 콘텐츠 처리 |
외부 프로세스 필요 |
자체 모듈 지원 |
확장성 |
우수 |
보통 |
로드 밸런싱 |
기본 지원 |
별도 설정 필요 |
Nginx는 정적 콘텐츠 및 고성능이 필요한 웹 서비스에 적합하며, Apache는 기존 시스템과의 호환성이 중요할 때 유용하다.
4. 주요 명령어
# Nginx 설치
sudo apt install nginx -y
# Nginx 실행, 중지, 재시작
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 설정 파일 문법 체크
sudo nginx -t
# 실시간 로그 확인
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
5. Nginx를 사용하는 이유
1. 고성능 웹 서버
• 빠른 정적 콘텐츠 제공
• 높은 동시 연결 처리 능력
2. 리버스 프록시 기능
• 백엔드 서버 보호 및 트래픽 관리
3. 로드 밸런서 기능
• 여러 서버로 부하를 분산하여 안정적인 서비스 제공
4. 보안 강화
• SSL/TLS 적용을 통해 HTTPS 지원
5. 적은 리소스 사용
• 메모리와 CPU 사용량이 낮아 가벼운 서버 운영 가능
Nginx는 성능, 확장성, 리소스 효율성 면에서 강력한 웹 서버이며, 대규모 트래픽을 처리해야 하는 서비스에서 널리 사용된다.