Apache & Nginx

Jiny's 개발 일기·2023년 3월 2일
0

Article

목록 보기
4/9

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 프로토콜

웹서버로 들어오는 요청을 웹서버 뒤에 있는 애플리케이션 서버로 위임할 수 있는 바이너리 프로토콜

  1. 브라우저가 서버에 접속(80 포트)
  2. 톰캣에서 처리해야하는 경우 톰캣의 AJP프토로 요청을 위임(8000 포트)
  3. 톰캣은 요청을 처리후에 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 컨텐츠에 대해서 성능이 높다.

자... 이제 실습하러 가자!

profile
옛날 블로그 주소 : https://jeongjin984.github.io/

0개의 댓글