NGINX는 가볍고 빠른 웹 서버이자 리버스 프록시, 로드 밸런서, API 게이트웨이 역할을 수행하는 오픈소스 소프트웨어이다. 높은 동시 연결 처리 성능과 비동기 이벤트 기반 아키텍처를 통해 트래픽이 많은 환경에서도 안정적인 서비스를 제공한다.
✔ 고성능 웹 서버
정적 콘텐츠 처리 속도가 빠름
✔ 리버스 프록시
백엔드 서버 보호 및 부하 분산
✔ 로드 밸런서
여러 서버로 트래픽을 분산하여 안정성 향상
✔ 보안 기능
SSL/TLS 종단, DDoS 방어 지원
✔ 마이크로서비스 지원
API 게이트웨이 및 컨테이너 환경과 잘 연동
클라우드, 마이크로서비스, 대규모 트래픽을 다루는 웹 서비스에서 필수적인 기술로 자리 잡고 있다.
웹 서버 최적화가 목적이라면 리버스 프록시 를 사용하고, API 관리와 보안이 필요하다면 API 게이트웨이를 사용한다.
| 기능 | 리버스 프록시 | API 게이트웨이 |
|----------------|--------------------------|----------------------------------|
| 주된 목적 | 요청 전달, 부하 분산, 보안 강화 | API 관리, 인증/인가, 로깅 |
| 주요 사용 사례 | 고성능 웹 서버, 트래픽 분산 | 마이크로서비스 관리, 인증 처리 |
| 사용 시점 | 단순 요청 전달 및 보안 기능이 필요할 때 | API 중심 서비스에서 복잡한 로직이 필요할 때 |
클라이언트 요청을 백엔드 서버(예: Node.js, Spring, Django)로 전달
여러 백엔드 서버를 숨기고 보안 및 성능 최적화
location /api/ {
proxy_pass http://backend-server:8080;
}
여러 개의 백엔드 서버에 트래픽을 분산하여 부하를 줄임
Round Robin, Least Connections 등의 로드 밸런싱 알고리즘 지원
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
}
location / {
proxy_pass http://backend_servers;
}
Let’s Encrypt 또는 자체 SSL 인증서를 사용하여 HTTPS 적용 가능
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
}
정적 파일 및 API 응답을 캐싱하여 성능을 향상
FastCGI 캐시, Proxy Cache, Microcaching 등을 지원
┌──────────────────┐
│ Master Process │
└────────▲─────────┘
│
┌───────────────────┴───────────────────┐
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ Worker Process │ │ Worker Process │
│ (Event Loop) │ │ (Event Loop) │
└────────▲────────┘ └────────▲────────┘
│ │
┌───────┴─────────┐ ┌───────┴─────────┐
│ Connection 1 │ │ Connection n │
│ (Request) │ │ (Request) │
└─────────────────┘ └─────────────────┘
설정 파일을 읽고 파싱한 후 워커 프로세스를 관리한다. 클라이언트 요청을 직접 처리하지 않는다.
설정 파일(nginx.conf) 로드 및 검증, 워커 프로세스 생성 및 종료 관리를 하며 싱글 프로세스로 실행된다.
클라이언트의 요청을 실제로 처리하는 프로세스이다. 이벤트 기반(event-driven) 아키텍처를 사용하여 동시 연결을 효율적으로 처리한다.
개수는 worker_processes 설정으로 조정 가능하다. (auto 설정 시 CPU 코어 수만큼 생성)
HTTP 요청 처리, 리버스 프록시 & 로드 밸런싱 수행, 정적 파일 제공한다.
Non-blocking, 비동기 방식으로 요청을 처리한다. epoll (Linux) 또는 kqueue (BSD)를 사용하여 수천 개의 동시 연결을 효율적으로 관리한다. 한 개의 워커 프로세스가 여러 클라이언트 요청을 동시에 처리 가능하다.
이벤트 루프 구조로 새로운 연결이 들어오면 이벤트 루프에 등록한다. 읽기/쓰기 작업이 가능한 경우 비동기적으로 처리하며, 클라이언트 응답 후 연결을 유지할지 종료할지 결정한다. (Keep-Alive 지원)
Nginx 를 실행한 후 제일 먼저 하는 일은 웹 화면이 정상 기동하는 지 확인하는 일이다. Nginx 루트 위치가 다를 수 있고 html 파일이 기본 제공되지 않아 화면이 나오지 않는 경우도 있다. 예를 들어 NGINX를 설치할 때 사용한 패키지 매니저(예: apt, yum, dnf)와 운영체제에 따라 기본 경로가 다를 수 있다.
Ubuntu/Debian 계열 (APT 사용): 기본적으로 /var/www/html
CentOS/RHEL 계열 (YUM/DNF 사용): /usr/share/nginx/html
설정 파일 내의 지정된 루트 경로를 환인한다. 기본적으로 NGINX 설정 파일은 /etc/nginx/nginx.conf에 위치한다. OS 유형에 따라 루트 위치 설정 파일 위치가 다를 수 있으니 확인이 필요하다.
설정 파일의 다음 부분이 루트 위치를 지정하는 부분이다.
server {
listen 80;
root /var/www/html/public;
charset utf-8;
index index.php index.html index.htm;
}
설정을 바꾸었다면 nginx를 재시작한다.
sudo systemctl restart nginx
| 배포판 | 설치 방법 | 기본 루트 디렉토리 |
|---|---|---|
| Ubuntu 20.04+ | APT | /var/www/html |
| Debian | APT | /var/www/html |
| CentOS 7/8 | YUM/DNF | /usr/share/nginx/html |
| RHEL | YUM/DNF | /usr/share/nginx/html |
| Alpine Linux | APK | /var/lib/nginx/html |
| 소스 설치 | 컴파일 옵션 | 지정한 경로 (--prefix) 사용 |
nginx -T | grep root
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root /usr/share/nginx/html;