본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Nginx(엔진엑스)는 적은 메모리로 많은 동시 접속을 처리하도록 비동기 이벤트 기반 구조로 만든 오픈 소스 웹 서버로, 리버스 프록시·로드 밸런서·HTTP 캐시로도 널리 쓰인다.

Nginx 는 러시아의 이고르 시셰프(Igor Sysoev)가 접속이 몰리는 포털 사이트의 성능 문제를 풀려고 만들어 2004년에 공개했다. 한 서버가 동시 접속 1만 개를 감당해야 하는 이른바 C10K 문제를 겨냥해 가벼움과 높은 성능을 목표로 설계했다. 2011년 같은 이름의 회사가 세워져 상용판(NGINX Plus)과 기술 지원을 시작했고, 2019년 F5 가 그 회사를 인수했다. 오픈 소스판은 2조항 BSD 라이선스로 배포된다.

정적 파일을 빠르게 내보내는 웹 서버로 출발했지만, 지금은 WAS 나 다른 웹 서버 앞에 서서 요청을 받아 넘기는 리버스 프록시, 여러 서버에 요청을 나누는 로드 밸런서, 응답을 저장해 두었다가 다시 주는 HTTP 캐시 역할로 더 많이 쓰인다. 메일 프록시(IMAP·POP3·SMTP)와 TCP·UDP 스트림 프록시 기능도 있다.

Nginx 는 마스터 프로세스 하나와 워커 프로세스 여러 개로 돈다. 마스터는 설정을 읽고 워커를 관리하며, 실제 요청은 워커가 처리한다. 워커는 보통 CPU 코어 수만큼 띄우고, 각 워커가 하나의 이벤트 루프에서 수천 개의 연결을 비동기(논블로킹)로 돌아가며 처리한다. 연결마다 프로세스나 스레드를 하나씩 붙이지 않으므로 접속이 늘어도 메모리 사용량이 크게 늘지 않는다.

구분 Nginx Apache HTTP Server
요청 처리 비동기 이벤트 기반. 워커 하나가 많은 연결을 함께 처리 연결(요청)마다 프로세스·스레드를 배정하는 MPM 방식(prefork·worker, 2.4 부터 event MPM 도 있음)
강점 많은 동시 접속, 정적 파일, 리버스 프록시·로드 밸런싱 모듈이 많고 .htaccess 로 디렉터리별 설정이 쉽다
동적 콘텐츠 직접 실행하지 않고 PHP-FPM·WAS 등에 넘긴다(FastCGI·프록시) mod_php 처럼 모듈로 서버 안에서 실행할 수 있다
설정 파일 /etc/nginx/nginx.conf, server·location 블록 httpd.conf, VirtualHost·Directory 지시자
  • 리버스 프록시 : proxy_pass 로 받은 요청을 뒤쪽 서버에 넘기고 응답을 돌려준다 → 프록시 서버
  • 로드 밸런서 : upstream 블록에 여러 서버를 적어 라운드 로빈·최소 연결·IP 해시 방식으로 요청을 나눈다 → 부하 분산
  • HTTP 캐시 : proxy_cache 로 뒤쪽 서버의 응답을 디스크에 저장해 같은 요청에 바로 응답한다
  • SSL/TLS 종료, HTTP/2·HTTP/3, gzip 압축, 접근 제어, 요청 속도 제한
http {
    upstream app {
        server 10.0.0.11:8080;
        server 10.0.0.12:8080;
    }
    server {
        listen 80;
        server_name www.example.com;
        location /static/ { root /var/www; }
        location / { proxy_pass http://app; }
    }
}
  • nginx -t : 설정 문법 검사
  • nginx -s reload : 접속을 끊지 않고 설정 다시 읽기 (systemd 환경에서는 systemctl reload nginx)

다른 웹 서버와 구분

편집 원본 편집
이름 내용
Nginx 비동기 이벤트 기반 오픈 소스 웹 서버. 리버스 프록시·로드 밸런서·HTTP 캐시
Apache HTTP Server 아파치 소프트웨어 재단의 오픈 소스 웹 서버. 모듈 구조, 프로세스·스레드 기반 MPM
IIS 마이크로소프트가 윈도우 서버에 넣어 주는 웹 서버
GWS 구글이 자기 서비스에만 쓰는 비공개 웹 서버. 내려받아 설치할 수 없다