NGINX는 웹서버이며 리버스 프록시, 로드밸런서, 그리고 Http cache로도 쓰일 수 있는소프트웨어입니다.
요청에 응답하기 위해 이벤트 기반 구조를 채택했습니다.
아파치 서버
C10K(Connection 10000 Problem)
동시 연결 수가 많아지면 서버가 커넥션을 형성하지 못함. (하드웨어가 아닌 소프트웨어가 문제)
아파치 서버의 구조상 Connection 형성시마다 Process를 생성해서 메모리 부족으로 이어진다. CPU 부하 UP.
-> 수많은 동시 커넥션을 감당하기엔 아파치 서버가 적합하지 않았다.
아파치는 커넥션당 프로세스 생성
아파치는 확장성이 좋은만큼 무거움
처음에는 아파치 앞 단에 nginx를 두는 방식을 위해 nginx를 만듦
nginx도 웹서버이기때문에 정적파일은 직접 처리하고, 동적파일만 아파치에 보내서 처리.
워커 프로세스는 큐 형식으로 이벤트를 처리 -> 프로세스가 쉬지 않고 일을 함
시간이 오래 걸리는 작업을 따로 수행하기 위해 쓰레드 풀을 사용함.
워커 프로세스는 보통 코어 개수만큼 생성 -> context switch를 줄임
ssl 터미네이션 가능
client와 https 통신, server와 http 통신
HSTS
CORS 처리
TCP/UDP 커넥션 부하 분산
HTTP/2
웹서버를 별도로 운영하는 이유?
WAS의 부담을 줄여주기 위해서
Nginx를 사용하는 이유?
- 빠르다 - 동시 요청자가 늘어나도 메모리 사용량이 거의 늘지 않음.
- 리버스 프록시로 사용 가능 - 로드 밸런싱, 캐싱 가능
- SSL 지원 - HTTPS도 Nginx를 사용해서 쉽게 사용 가능
- 웹페이지 접근 인증 - 올바른 사용자인지 검증하는 과정을 WAS가 아닌 Nginx에서 해 줌
- 압축
- 비동기 처리 - 이벤트루프
Nginx를 Proxy 서버로 앞단에 두고 Node.js를 뒷단에 둔다면 버퍼 오버플로우 취약점에 의한 공격을 방지할 수 있다.
http로 접근하면 80번 포트, https는 443번 포트로 접근함.
Nginx가 이 포트를 5000번(서버의 포트)으로 바꿔서 Node.js 서버에 접근 가능하게 함.
참조
https://www.youtube.com/watch?v=6FAwAXXj5N0&list=WL&index=3&t=16s
'Computer Science > 개발상식' 카테고리의 다른 글
kafka 아는 척 하기(정리 실패) (0) | 2022.05.11 |
---|---|
CQRS 아는 척 하기 (0) | 2022.04.14 |
UX란 무엇인가? (0) | 2022.01.24 |
NTP란 무엇인가? (0) | 2021.11.05 |
객체 지향 프로그래밍이란 무엇인가 (0) | 2021.10.12 |