Docker - NginX는 왜 인기가 있을까?
What is NginX?
NGINX 는 웹 서비스
, 리버스 프록시
, 캐싱
, 로드 밸런싱
, 미디어 스트리밍
등을 위한 오픈 소스 소프트웨어이며
최대 성능과 안정성을 위해 설계된 웹 서버 서비스이다.
HTTP 서버 기능 외에도 NGINX는 이메일(IMAP, POP3 및 SMTP)용 프록시 서버와 HTTP, TCP 및 UDP 서버용 리버스 프록시 및 로드 밸런서로도 사용할 수 있습니다.
프록시
두 PC가 통신을 할 때 직접 하지 않고 중간에서 대리로 통신을 하는 것을 프록시
라고 하고, 중계 역할을 하는 것을 프록시 서버
라고 한다.
리버스 프록시
애플리케이션 서버의 앞에 위치하여 클라이언트가 서버를 요청할 때 리버스 프록시를 호출하고,
리버스 프록시가 서버로부터 응답을 전달받아 다시 클라이언트에게 전송하는 역할을 한다.
이 경우, 클라이언트는 애플리케이션 서버를 직접 호출하는 것이 아니라 프록시 서버를 통해 호출하기 때문에
리버스 프록시는 애플리케이션 서버를 감추는 역할을 하게 된다.
EX) NginX, Apache Web Server
- 로드밸런싱
- 리버스 프록시 뒤에 여러 개의 WAS를 둠으로써, 사용자 요청을 분산할 수 있다.
- End-point 마다 호출 서버를 설정할 수 있어 역할에 따라 서버의 트래픽을 분산할 수도 있다.
- 보안 : 서버에 직접 접근하는 것을 방지하고 네트워크에 리버스 프록시를 구성하여 접근하도록 한다.
포워드 프록시
클라이언트에서 서버로 리소스를 요청할 때 직접 요청하지 않고 프록시 서버를 거쳐서 요청한다.
이 경우 서버에서 받는 IP는 클라이언트의 IP가 아닌 프록시 서버의 IP 이기 때문에 서버는 클라이언트가 누군지 알 수 없다.
즉, 서버에게 클라이언트의 익명성을 보장한다.
캐싱
- 포워드 프록시는 정적 데이터를 저장해두고 동일한 요청의 경우 웹서버 까지 가지 않고 포워드 프록시에서 처리할 수 있는 캐싱 역할을 수행한다.
IP우회
제한
- 보안이 중요한 사내망에서 정해진 사이트에만 연결 할 수 있도록 설정하는 등 웹 사용 환경을 제한할 수 있다.
- 보안이 중요한 사내망에서 정해진 사이트에만 연결 할 수 있도록 설정하는 등 웹 사용 환경을 제한할 수 있다.
로드 밸런싱
서버가 부담하는 부하를 분산해주는 장치 혹은 기술이다.
네트워크에서 IP 주소와 MAC 주소를 이용해 목적지 IP 주소를 찾아가고 출발지로 되돌아오는 구조이다.
부하 분산 방식은 크게 두가지 HW방식
과 SW방식
으로 구분된다.
HW 방식
- Layer 4 (전송계층) 로드 밸런싱
- 네트워크 계층 layer4(전송)에서 실행
- TCP/UDP 포트 정보를 바탕으로 진행
- 데이터 안을 보지 않고 패킷 레벨에서만 진행
- 속도 빠르고 효율 높다
- 데이터 내용을 부호화하지 않아 안전하다
- L7보다 저렴하다
- 사용자의 IP가 수시로 바뀌는 경우 연속적인 서비스 제공이 어렵다.
- layer 7 (응용계층) 로드 밸런싱
- 네트워크 계층 layer7(응용)에서 실행
- TCP/UDP + HTTP의 URI, FTP 파일명, 쿠키 정보 등을 바탕으로 진행
- 캐싱 기능을 제공
- 상세한 라우팅이 가능
- 비정상적인 트래픽은 사전에 필터링 > 안전성 높아짐
- 비용은 L4보다 높다.
SW 방식
리버스 프록시
기반의 로드밸런싱
- HAProxy
- HV, Proxy, TCP/HTTP 로드 밸런싱을 지원하는 제품. Airbnb, Github, naver ncloud에서 사용중.
- Seeasaw
- 구글에서 GO언어로 개발하였으며, 우분투/데비안과 같은 리눅스 배포판에서도 잘 동작됨. Anycast, DSR을 지원함. 기본적으로 L4 network에서 작동하며, L7에서 로드 밸런싱도 가능함.
- KEMP
- AWS 또는 Azure와 같은 클라우드 데이터센터에 배포하여 사용 가능함. 무료이지만 사용 수준의 기능을 제공하며 Apple, Sony 등에서 사용함.
- Nginx
- 기본 수준의 컨텐츠 스위칭 및 여러 서버에 대한 라우팅 지원함