Nginx
기본 정보
- 이름: Nginx
- 발음: 엔진엑스
- 분류: 웹 서버(Web Server), 리버스 프록시(Reverse Proxy), 로드 밸런서
- 개발자: 이고르 시소예프(Igor Sysoev)
- 최초 공개: 2004년
- 라이선스: BSD License (오픈소스)
- 주요 용도: 웹 서비스, API 서버, 리버스 프록시, SSL 처리
- 관련 주제: #Nginx #웹서버 #ReverseProxy #LoadBalancer #HTTP
개요
Nginx는 고성능 웹 서버 및 리버스 프록시 서버이다.
이벤트 기반(Event-Driven) 비동기 구조를 사용하여 적은 메모리로 많은 동시 접속을 처리할 수 있으며, 대규모 웹 서비스와 API 서버에서 널리 사용된다.
정적 파일 서비스, SSL 종료(SSL Termination), 로드 밸런싱, 캐싱 등 다양한 기능을 제공하며, PHP-FPM과 함께 PHP 서비스를 운영하는 경우가 많다.
주요 특징
- 이벤트 기반(Event-Driven)
- 비동기(Asynchronous) 처리
- 높은 동시 접속 처리 성능
- 리버스 프록시 지원
- 로드 밸런싱 지원
- HTTP/2 및 HTTP/3 지원
- SSL/TLS 지원
- FastCGI 지원
- 캐시 기능 제공
동작 구조
브라우저
↓
HTTP / HTTPS
↓
Nginx
├── 정적 파일
├── Reverse Proxy
├── Load Balancer
├── SSL
├── Cache
└── FastCGI
↓
PHP-FPM / Node.js / Spring Boot
↓
Database
주요 역할
- 정적 파일 제공
- Reverse Proxy
- SSL 인증서 처리
- API Gateway
- Load Balancing
- 캐시 서버
- 압축(Gzip/Brotli)
- URL Rewrite
설치 경로(Linux)
/
/etc/nginx/
/etc/nginx/nginx.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
/var/www/
/var/log/nginx/
배포 환경에 따라 경로는 달라질 수 있다.
주요 설정 파일
nginx.conf
default.conf
site.conf
mime.types
기본 서버 설정
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
}
Location
location / {
try_files
$uri
$uri/
/index.php?$query_string;
}
URL 요청을 처리하는 핵심 설정이다.
PHP-FPM 연동
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
include fastcgi_params;
}
PHP 요청을 PHP-FPM으로 전달한다.
Reverse Proxy
location / {
proxy_pass
http://127.0.0.1:3000;
}
Node.js, Spring Boot 등 백엔드 서버 앞단에서 사용된다.
Load Balancer
upstream backend {
server 192.168.0.10;
server 192.168.0.11;
}
proxy_pass
http://backend;
여러 서버에 요청을 분산한다.
HTTPS
server {
listen 443 ssl;
ssl_certificate cert.pem;
ssl_certificate_key key.pem;
}
SSL/TLS를 적용하여 HTTPS 서비스를 제공한다.
Redirect
return 301
https://example.com;
HTTP → HTTPS 리디렉션 등에 사용된다.
Gzip
gzip on;
gzip_types
text/css
application/javascript;
응답 데이터를 압축하여 전송 속도를 향상시킨다.
Cache
proxy_cache mycache;
API 및 정적 파일의 응답 속도를 높이는 데 활용된다.
로그
Access Log
access.log
Error Log
error.log
운영 중 장애 분석과 트래픽 확인에 사용된다.
주요 활용 분야
- 웹 서버
- API Gateway
- Reverse Proxy
- Load Balancer
- CDN Origin
- Docker Gateway
- Kubernetes Ingress
- SSL Gateway
성능 최적화
대표 방법
- Worker Process 조정
- Worker Connections 조정
- Keepalive 활성화
- Gzip/Brotli 압축
- HTTP/2 활성화
- Cache 활용
- FastCGI Cache 사용
- 정적 파일 캐싱
보안 설정
권장 사항
- HTTPS 기본 적용
- TLS 최신 버전 사용
- Server Token 숨김
- Rate Limit 적용
- IP 접근 제한
- Security Header 추가
- 최신 버전 유지
- 불필요한 모듈 제거
Apache와 비교
| Nginx | Apache |
|---|---|
| 이벤트 기반 | 프로세스/스레드 기반 |
| 동시 접속 처리 우수 | 설정 유연성 높음 |
| Reverse Proxy 강점 | .htaccess 지원 |
| 메모리 사용량 적음 | 모듈 생태계 풍부 |
| 대규모 서비스 적합 | PHP 단독 운영에 적합 |
대표 활용 사례
- Netflix
- GitHub
- WordPress 호스팅
- API 서버
- Kubernetes Ingress Controller
- Docker 기반 서비스
장점
- 매우 높은 성능
- 낮은 메모리 사용량
- 동시 접속 처리 우수
- Reverse Proxy 기능 강력
- 설정이 구조적
- Docker 및 Kubernetes와 잘 어울림
단점
.htaccess미지원- 초기 설정이 Apache보다 어려울 수 있음
- 복잡한 Rewrite 규칙 작성 시 학습 필요
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- HTTPS 기본 적용
- HTTP/2 활성화
- PHP는 PHP-FPM 사용
- Reverse Proxy 구조 적용
- Gzip 또는 Brotli 압축 활성화
- Cache 적극 활용
- Access/Error Log 분리 관리
- Worker Process 자동 설정
- Docker와 함께 운영
- Let's Encrypt 인증서 자동 갱신 적용
Nginx와 함께 사용하는 기술
대표 명령어
설정 검사
nginx -t
재시작
systemctl restart nginx
시작
systemctl start nginx
중지
systemctl stop nginx
리로드
systemctl reload nginx
관련 문서
- Apache
- 웹서버
- Reverse Proxy
- Load Balancer
- PHP
- PHP-FPM
- Docker
- Kubernetes
- SSL
- Let's Encrypt
- 웹개발
출처
- Nginx 공식 홈페이지
- Nginx 공식 문서
- Nginx Admin Guide