Nginx 란?
: 높은 성능과 안정성을 바탕으로 현재 가장 많이 사용되고 있는 웹 서버 소프트웨어.
웹 서버,리버스 프록시 및 메일 프록시 기능을 포함한다.
작동 원리
- 멀티 프로세스 싱글 스레드 방식으로 동작한다고 한다.
* 멀티 프로세스 싱글 스레드 방식이란?
: 여러 개의 작업을 각각 독립된 프로그램(프로세스)으로 나누어 동시에 실행하지만 각 프로그램 안에서는 한 번에 한 작업(스레드)만 처리하는 방식
- 비동기 이벤트 방식으로 동작해서 더 작은 메모리로 운영할 수 있다.
>> 동시에 많은 요청을 빠르고 효율적으로 처리할 수 있다
1. 요청 처리
- 사용자가 웹 브라우저를 통해 서버(NGINX)에 요청을 보내면 요청마다 개별적인 프로세스를 생성하지 않고 이벤트 핸들러에서 처리한다.
2. 이벤트 루프
- 비동기적으로 작동하여 요청이 끝날 때까지 기다리지 않고 다른 요청을 처리하는 이벤트 루프를 통해 순서대로 확인하고 처리한다.
3. 효율성
- cpu 코어를 활용하여 병렬로 요청을 처리하기 때문에 여러개의 요청이 동시에 들어와도 독립적으로 처리된다.
다른 웹 서버들과의 차이점
Apache vs Nginx
[Apache]
1. 스레드 / 프로세스 기반 구조
- 클라이언트 요청당 하나의 스레드가 처리하는 구조
- 사용자가 많으면 스레드 생성, 메모리 및 cpu 낭비가 심하다
2. MPM (Multi-Process Module)
- PreFork MPM (다중 프로세스)
: 사용자 요청에 대해 Apache 자식 프로세스를 생성하여 처리
하나의 자식 프로세스 당 하나의 스레드를 갖는 구조로 자식 프로세스는 1024개까지 가능
스레드 간 메모리 공유 X >> 독립적이기에 안정정이지만 메모리 소모가 큼
실행 중인 프로세스를 복제하여 실행 (메모리 영역까지 복제)
디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
일반적으로 Single CPU 또는 Dual CPU에서 성능이 더 좋음
-Woker MPM (멀티 프로세스-스레드)
: Prefork 보다 메모리 사용량이 적고 동시 접속자가 많은 사이트에 적합함
각 프로세스의 스레드를 생성해 처리하는 구조
스레드 간의 메모리 공유 가능
프로세스 당 최대 64개의 스레드 처리 가능하며 각 스레드는 하나의 연결만을 부여
일반적으로 Multi CPU 시스템에서 성능이 좋음
3. 동적 컨텐츠 처리
4. 다양한 모듈
[총정리]
Apache | NginX |
요청 당 스레드 또는 프로세스가 처리하는 구조 | 비동기 이벤트 기반으로 요청 |
CPU / 메모리 자원 낭비 심함 | CPU / 메모리 자원 사용률 낮은 |
NginX보다 모듈이 다양 | Apache 에 비해 다양한 모듈이 없음 |
PHP 모듈 등 직접 적재 가능 | 많은 접속자들 대응 가능 |
안정성, 확장성, 호환성 우세 | 성능 우세 |
동적 컨텐츠 단독 처리 가능 | 동적 컨텐츠 단독 처리 불가능 |
WLS에 NginX 설치
1. 서버 패키지 목록 업데이트
sudo apt update
sudo apt upgrade
2. NginX 설치
sudo apt install nginx
3. 실행
sudo service nginx start
sudo service nginx status
4. NginX Version 확인
sudo dpkg -l nginx
apt list nginx
5. wsl 내부 ip로 접속
hostname -I