-
apache vs nginxBack-End/nginx 2021. 9. 10. 12:01728x90
apache
- http 웹 서버 소프트웨어이다.
- Apache는 MPM(Multi-Process Module) 방식으로 http request를 처리한다. MPM방식은 2가지의 유형으로 나뉜다.
PreFork MPM(다중 프로세스)
- http request가 들어올 시, apache 자식 프로세스를 생성하여 처리한다.
- 하나의 자식 프로세스당 하나의 스레드를 가진다.(최대 1024개)
- 프로세스간 메모리 공유를 하지 않으므로 독립적이어서 안정적이지만, 메모리 소모가 크다는 단점이 있다.
Worker MPM(멀티 프로세스 - 스레드)
- 요청이 들어오면, 프로세스가 스레드를 생성하여 request를 처리한다.(프로세스당 최대 64개)
- 스레드 간의 메모리 공유가 가능하다.
- Prefork MPM 방식보다 메모리 소모가 적고, 동시에 많은 request가 들어올 때 더 효율적이다.
- 어느 방법이 되었건, 많은 클라이언트로부터 동시에 request가 들어올 경우 CPU와 메모리 사용량이 증가하고, 추가적인 Process/thread 생성 비용이 들기 때문에 대용량 처리에 비효율적이다.
- 또, apache서버의 프로세스는 blocking 상태가 되면 처리가 완료될 때 까지 대기상태를 유지하기 때문에 효율성이 떨어진다.
Nginx
- 웹 서버 소프트웨어이며, 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고 Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서 및 https 프로토콜 적용을 위한 리다이렉션에 활용되기도 한다.(물론 이 모든 작업들은 apache로도 가능하다!)
- nginx는 event-driven 방식으로 작동한다. 한 개 또는 고정된 프로세스만 생성 하고, 그 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리한다. 따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않는다. 자세히는 Event-Driven 방식은 작업을 하다 I/O, socket read/write 등 CPU가 관여하지 않는 작업이 시작되면 기다리지 않고 바로 다른 작업을 수행한다. 그러다 진행중인 I/O 등의 작업들이 끝나면 이벤트가 발생하여 그 다음 작업을 처리하게 된다.
- Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다. Master Process는 설정 파일을 읽고, 유효성을 검사한다. 그리고 Worker Process를 관리한다. 모든 요청은 Worker Process에서 처리한다. Nginx는 이벤트 기반 모델을 사용하고, Worker Process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘을 사용한다. Worker Process의 개수는 설정 파일에서 정의되며, 정의된 프로세스 개수와 사용 가능한 CPU 코어 숫자에 맞게 자동으로 조정된다.
nginx 사용법
https://icarus8050.tistory.com/57
'Back-End > nginx' 카테고리의 다른 글
nginx의 reverse proxy 적용하여 http => https 적용하기 (0) 2021.09.11