본문 바로가기

WebInfo

nginx 이해

1. nginx란?

 NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers.(공식문서)

  • nginx는 역방향 프록시이다.
  • 서버와 클라이언트 사이에 존재하는 서버

 

2. nginx 전체 흐름

http(80), https(443) --- nginx ---- was(web application server) --- Database

  • nginx는 클라이언트의 request를 받아 웹서버로 전달한다.
  • nginx는 response 받은 후 다시 클라이언트한테 전달하는 역할을 한다.

1) nginx 통신의 예

  • was가 tomcat이라고 가정
  • nginx가 https request를 443 port로 받아서 tomcat으로 요청을 보낼 수 있도록 443 port를 server port로 request를 리다이렉트 해준다.

 

3. nginx 목표

  • 가장 빠른 웹 서버를 만드는 것

4. nginx 나온 배경

1) C10K 문제(Connection 10000 Problem)

: 서버 트래픽이 높아져서 서버에 동시 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 문제

2) 아파치 서버의 문제점

[1] 프로세스 할당하기에 메모리 부족

[2] 많은 커넥션 요청이 들어오면 CPU 부하가 높아짐 (컨텍스트 스위칭)

즉, 수많은 동시 커넥션을 감당하기엔 아파치 서버의 구조가 적합하지 않았다.

 

5. C10K 문제 해결방법

  • nginx 

 

6. nginx 장점

[1]수많은 동시 커넥션을 유지

[2]웹서버이므로 정적 파일에 대한 요청은 스스로 처리

[3]웹 서버 역할의 nginx는 클라이언트로부터 동적 파일 요청을 받았을 때만 서버와 커넥션 형성(이때에도 db 접근할 때에만)

[4]비동기 처리

 

7. nginx구조

1) master process

  • 설정 파일 읽고 worker process 생성

2) worker process

  • 이 워커에 listen 소켓을 배정 받음
  • 이 소켓에 request가 들어오면 connection 형성하고 처리
  • 이 커넥션에 요청이 없으면 다른 커넥션 요청부터 처리
  • 커넥션은 keep alive 시간만큼 유치
  • 이 커넥션은 queue로 관리

[1]event란

  • nginx에서는 이런 커넥션 형성과 제거, 새로운 요청을 처리하는 것을 의미.

 

8. nginx를 사용하는 이유?

[1]빠르다

[2]리버스 프록시로 사용 가능(reverse proxy)

  • 리버스 프록시(대신 처리해주는 것을 의미)는 인터넷과 백엔드 그 사이에 있는 서버를 의미

[3]ssl 지원

[4]웹페이지 접근 인증

[5]압축

[6]비동기 처리

대략 1만 개의 요청을 처리할 수 있다.

 

ps. apache 동기 처리이다.*

 

 

 

references

 

1. nginx official reference

https://www.nginx.com/resources/glossary/nginx/

https://docs.nginx.com/

 

2. nginx 영상

https://www.youtube.com/watch?v=ZJpT-Wa-pZ8 

 

 

 

 

 

 

 

'WebInfo' 카테고리의 다른 글

웹사이트 검색 노출 설정 방법  (0) 2022.09.19
proxy server 이해  (0) 2022.07.10
서버를 어떻게 안전하게 운영할 수 있을까?  (0) 2022.05.13
JWT(Json Web Token)  (0) 2022.04.19
HTTP  (0) 2021.11.09