<aside> 📌

정적 웹서버 제공을 위한 가이드

</aside>

개념

리버스 프록시 vs 포워드 프록시

포워드 프록시
출처: https://choiseonjae.github.io/difference/forward-proxy-and-reverse-proxy/

포워드 프록시 출처: https://choiseonjae.github.io/difference/forward-proxy-and-reverse-proxy/

리버스 프록시
출처: https://choiseonjae.github.io/difference/forward-proxy-and-reverse-proxy/

리버스 프록시 출처: https://choiseonjae.github.io/difference/forward-proxy-and-reverse-proxy/

NGINX reload

새로운 파일을 적용하기 위해 reload를 통해 진행

프로세스 조회 시, NGINX에선 master process와 worker process로 분리되어 처리됨

master worker를 통해 새로운 worker를 생성하고 reload 시, old worker process를 shutdown하고 새로운 요청들은 new worker process로 전달

NGINX의 Zero-Downtime

<aside> 📌

wrk - HTTP 벤치마킹 툴

</aside>

리버스 프록시 서버의 역할로 무중단 배포가 가능하다는 말

테스트 케이스

선행작업: (*wrk -t7 -c20 -d60s <http://127.0.0.1:80/users> 명령어로 벤치마크를 실행* )

  1. 현재 서비스되는 컨테이너 ( Blue )가 있다면 배포 예정될 내용을 새로운 컨테이너( Green )에서 실행 ⇒ 컨테이너 동시 실행상태 ( 로드밸런싱 상태 )

  2. 새로운 컨테이너가 안정적으로 작동하면 Blue컨테이너를 Down

    ⇒ nginx.conf에서 리버스 프록시 설정을 해둔 upstream에서 Blue컨테이너에 해당하는 포트를 Down

  3. 벤치마킹이 안정적으로 이루어졌는지 결과를 확인

결론은, keep-alive를 사용하는 클라이언트는 nginx 에서 "Connection: Close" 를 주지 않고 끊어버리니 그걸 감안해서 적절한 에러처리 ? ⇒ 확인필요

설정

NGINX Config