Nginx
더 많은 작업
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 지시자 |
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 | 구글이 자기 서비스에만 쓰는 비공개 웹 서버. 내려받아 설치할 수 없다 |