Apache
연동 방식
- mod_jk
- Tomcat Connector(별도의 모듈)를 사용하는 방식
- JKMount 옵션을 이용하면 URL이나 컨텐츠 별로 유연한 설정 가능
- ajp 프로토콜 사용
- mod_proxy
- Reverse Proxy 기능을 사용하는 방식
- 별도의 모듈 설치 불필요
- 특정 WAS에 의존적이지 않음
- URL 별 유연한 설정이 어려움(ProxyPassMatch를 사용해야함)
- apache2.4 부터 성능 차이 크게 없다고 함
- mod_proxy_ajp
- ajp 프로토콜을 사용하여 Reverse Proxy를 구현하는 방식
- WAS 의존X
- 별도 모듈 설치 불필요
AJP 프로토콜
웹서버로 들어오는 요청을 웹서버 뒤에 있는 애플리케이션 서버로 위임할 수 있는 바이너리 프로토콜
- 브라우저가 서버에 접속(80 포트)
- 톰캣에서 처리해야하는 경우 톰캣의 AJP프토로 요청을 위임(8000 포트)
- 톰캣은 요청을 처리후에 Apache에 반환
특징
- HTTP의 내용을 포워딩 용도에만 있다.
- Secure하지 않다.(Https 사용해야 함)
- 8K 이상을 전송하지 못한다.
Nginx
비동기 이벤트 기반구조의 웹 서버 프로그램
특징
Nginx에서는 connection 형성과 제거, 그리고 새로운 요청을 처리하는 과정을 이벤트(event)라고 합니다.
- master process: 설정 파일을 읽거나 검즈하며 Worker process를 관리하는 역할
- worker process: 비동기 이벤트 기반 모델을 통해 실질적 처리를 수행
- Worker Process의 수는 CPU 코어와 같은 수를 권장 함
- 형성된 connection으로부터 아무런 요청이 없다면 새로운 connection을 형성하거나 이미 만들어진 다른 connection으로부터 들어온 요청을 처리합니다.
- connection은 정해진 Keep-Alive 시간만큼 유지됩니다. 하지만 connection이 형성되었다고 해서 worker process가 해당 connection 하나만 담당하지는 않습니다
Nginx vs Apache
Apache
- 다양한 OS에서 안정적
- multi-threaded 방식으로 request를 처리함
- 모듈을 dynamic하게 로드할 수 있다.
- 하나의 스레드에서 하나의 connection만(blocking)
- static 컨텐츠에 대해서 성능이 낮다.(흠...)
Nginx
- modern OS에서 안정적으로 작동
- event-driven 방식으로 request를 처리함
- core sofware에 모든 것이 컴파일 되고 모듈 로드 불가.
- 하나의 스레드에서 여러개의 커넥션 처리(non blocking)
- static 컨텐츠에 대해서 성능이 높다.
자... 이제 실습하러 가자!