Apache
Apache 는 다양한 종류의 클라이언트의 리퀘스트를 처리하는 MPM을 제공한다.
위의 기본적인 3가지 유형의 요청 처리 알고리즘으로, 각기 다른 서버의 요구/로드에 적합하다.
MPM은 요청 처리 알고리즘과 다양한 종류의 커낵션에 있어 유연한 아키텍쳐를 제공하는데
이 유연한 아키텍쳐는 결국 리소스 소비로 이어진다.

NgInx
Nginx 의 키워드는 다음과 같다.
Nginx는 각각 수천개의 커넥션을 처리할 수 있는 worker 프로세스를 생성하는데
이러한 커넥션 프로세싱 모델로 인해서 제한된 리소스 소비로 매우 빠르고 광범위하게 확장이 가능하다.
(memory 및 CPU 사용은 부하가 높을 떄에도 비교적 일관되게 유지되는 경향이 있다.)

Apache의
정적 & 동적 리소스
Apache 는 기존의 파일 기반 방식을 사용해서 정적 리소스를 처리한다.
또한 동적 로딩 모듈을 통해서 외부 컴포넌트에 의존하지 않고도 웹 서버 자체 내에서 동적 리소스를
처리 가능하다.
Nginx의
정적 & 동적 리소스
Nginx 는 스스로 동적 프로세스를 할 수 없다.
실행을 위해서 콘텐츠를 외부 프로세서로 전달하고 렌더링된 콘텐츠가 다시 전송될 때까지 기다린다.
Apache의
분산 or 중앙화 설정
아파치는 ".htaccess" 파일의 지시어를 해석해서 디렉토리 단위로 추가 구성을 할 수 있다.
권한이 없는 사용자가 기본 구성 파일을 편집 할 수 없다. 하지만 웹 사이트의 특정 부분을 제어할 수는 있다.
Nginx 의
분산 or 중앙화 설정
Nginx 는 디렉토리 별로 구성을 위한 기능을 제공하지 않는다. 근데 가능 한 것 같기도 한데 잘은 모르겠다.
https://www.kyrandia.net/2012/03/nginx-htaccess.html
https://stackoverflow.com/questions/35766676/how-can-i-use-an-htaccess-file-in-nginx 읽어 볼것
How can I use an .htaccess file in Nginx?
I am currently migrating my website from Apache to nginx, but my .htaccess file is not working. My website is inside the /usr/share/nginx/html/mywebsite folder. How can I use .htaccess in my nginx ...
stackoverflow.com
하지만 이러한 특징이 Apache의 파일 지시어 해석과 같은 동작이 없기 떄문에 빠를 수 있다는 것으로 알 고 있다.
즉, htaccess 같은 파일을 검색 하지 않아도 된다.
Apache파일 또는 URI 기반 해석
Apache는 기본 파일 시스템과 웹 공간 모두에서 작동할 수 있는 기능을 가지고 있다 또한
파일 시스템 메서드에 크게 의존하고있다.
아파치는 요청을 파일 시스템의 물리적인 리소스 또는 URL로 해석하는 기능을 제공하기 떄문에
요청을 해석으로 시스템의 실제 리소스를 매핑하는 방법이다.
Nginx
파일 또는 URI 기반 해석
Nginx는 기본 파일 시스템과 웹 공간 모두에서 작동 할 수 있는 기능을 가지고 있으며 파일 시스템 메서드에 크게 의존한다.
아파치와는 다르게 URI 자체를 전달한다. 즉 해석도 필요없다 . 이것이 htaccess같은 파일이 존재하지 않는 이유이다.
어느 정도의 차이점은 짚었고
Nginx가 왜 나왔을 까?
1999년 부터 서버트래픽이 많아져서 서버에 동시 연결된 커넥션이 많아 졌을 때 더이상 커넥션을 형성하지 못하는 문제가 생겼다.
아까도 말했지만 아파치는 커넥션 풀같은 기능을 가지고 있다.
아파치의 문제로는
수 많은 동시 커넥션을 감당하기에는 아파치 서버의 구조가 적합하지 않았다.

수많은 동시 커넥션을 Nginx가 유지하고, 웹서버이기에 정적 파일에 대한 요청은 스스로 처리하여
아파치 서버의 부하를 줄였다.
웹 서버 역할의 Nginx는 클라이언트로부터 동적 파일 요청을 받았을 때만 뒤에 있는 아파치 서버와 커넥션을 형성했다.
Nginx의 동적 처리
NGINX 기능 및 모듈인 CGI 또는 프록시 기능을 사용한다면 동적 요청을 외부 프로그램에 전달하여 처리하므로 동적처리를 제공
Nginx의 구조

Nginx 는 하나의 Master Process가 존재하고 N개의 고정된 Worker Process로 구성이 되어있다.
Master Process는 설정 파일을 읽거나 검증하며 Worker Process를 관리한다.
Worker 가 실질적인 일 처리를 진행하는데 Nginx는 비동기 이벤트 기반 모델을 통해서
Worker간에 요청을 효율적으로 분산 가능하다.
Worker가 생성될 때 Listen 소켓을 배정받고
그 소켓에 새로운 클라이언트 요청이 들어오면 커넥션을 형성하고 처리한다.
커넥션은 정해진 Keep Alive시간만큼 유지된다. 형성된 커넥션에 아무런 요청이 없으면
새로운 커넥션을 형성하거나 이미 만들어진 다른 커넥션으로부터 들어온 요청을 처리 한다.
워커 프로세스는 처리할 요청이 시간이 오래 걸릴 것 같으면 스레드 풀에 이벤트를 위임하고 다른 이벤트를 처리한다.
이렇게 커넥션 형성, 제거, 새로운 요청 처리 등을 이벤트라고 부른다.
아파치 서버는 커넥션 연결 후 요청이 없다면 방치되는 반면, NGINX는 커넥션 연결 후 요청이 없으면 다른 커넥션의 요청을 처리하거나 새로운 커넥션을 형성하므로 아파치 서버에 비해 서버 자원을 효율적으로 쓰는 것을 알 수 있다.
Worker Process는 보통 CPU 코어 수만큼 생성하게 되는데
그래서 코어가 담당하는 프로세스를 바꾸는 횟수를 줄이기 떄문에 CPU의 컨텍스트 스위칭이 덜 일어나게 되며
이는 부하를 줄이게 된다.
이것이 바로 Nginx가 사용하는 Event-Driven Model 이벤트 기반 구조이다.
| Forward & Reverse & Load Balancer (0) | 2022.10.27 |
|---|
댓글 영역