Nginx는 현재 가장 인기 있는 오픈 소스 웹 서버 및 프록시 서버 중 하나로써 Nginx는 Igor Sysoev에 의해 개발된 비동기 이벤트 기반의 웹 서버 및 리버스 프록시 서버이다. Nginx는 강력한 성능과 뛰어난 확장성으로 알려져 있으며, 많은 웹 사이트와 애플리케이션에서 사용되고 있다.
Nginx는 Apache 웹 서버의 한계를 극복하기 위해 개발되었다. Apache는 프로세스 또는 스레드를 사용하여 요청을 처리하는 반면, Nginx는 이벤트 기반 구조를 사용하여 비동기 처리를 수행한다. 이로 인해 Nginx는 더 적은 메모리와 CPU 리소스를 사용하면서 더 높은 동시 연결 처리량을 제공할 수 있다.
Nginx는 마스터 프로세스와 여러 개의 워커 프로세스로 구성된다.
마스터 프로세스는 Nginx를 실행시킬 때 시작되며, 설정 파일을 읽고 초기화 작업을 수행한다. 이 프로세스는 워커 프로세스를 관리하고, 신규 워커 프로세스의 생성, 종료, 재시작 등을 담당한다. 또한, 마스터 프로세스는 네트워크에서 발생하는 이벤트를 처리하고, 요청을 받아들이는 역할을 한다.
워커 프로세스는 실제 요청을 처리하고 응답을 반환하는 역할을 한다. 각 워커 프로세스는 독립적으로 동작하며, 동시에 여러 클라이언트 요청을 처리할 수 있다. 이벤트 기반 아키텍처를 통해 각 워커 프로세스는 비동기적으로 동작하여 효율적인 I/O 처리를 가능하게 한다. 또한, 워커 프로세스는 자체적으로 CPU 코어를 활용하여 병렬 처리를 수행하여 성능을 향상시킨다.
Nginx의 이벤트 기반 아키텍처는 다수의 동시 연결을 효율적으로 관리할 수 있는 장점을 제공한다. 비동기 이벤트 처리 모델을 사용하여 블로킹되는 I/O 작업 없이 다수의 연결을 처리할 수 있으며, 효율적인 리소스 사용과 높은 동시성을 실현할 수 있다.
가볍고 높은 성능
Nginx는 작은 메모리 공간과 높은 동시 연결 처리량을 가지고 있어 효율적인 성능을 제공한다.
확장성
Nginx는 이벤트 기반 아키텍처와 모듈화된 구조로 구성되어 있어 확장에 용이하다.
리버스 프록시
Nginx는 리버스 프록시 서버로 사용될 수 있어 웹 서버 뒷단에 있는 애플리케이션 서버와의 통신을 관리하고 로드 밸런싱을 수행할 수 있다.
동적 컨텐츠 처리
Nginx는 정적 파일 서빙에 최적화 되어있어 동적 컨텐츠 처리를 위해서는 별도의 모듈이나 연동이 필요하다.
설정 복잡성
Nginx의 설정은 Apache와 비교했을 때 상대적으로 복잡하다.
동시 connection 수 당 메모리 사용률을 나타낸다. Nginx는 동시 connection의 수가 늘어나도 낮고 일정한 메모리 사용률을 보인다.
동시 connection 수에 따라 처리되는 초당 요청 수를 나타낸다.
Nginx가 Apache에 비해 훨씬 많은 요청을 처리하는 것을 볼 수 있다.
로드 밸런싱은 여러 대의 서버에 분산된 작업을 공평하게 분배하여 시스템의 성능, 가용성, 신뢰성을 향상시키는 기술이다. 로드 밸런싱은 대규모 웹 사이트나 애플리케이션에서 트래픽 부하를 분산시키고, 단일 서버에 대한 응답 지연 시간과 과부하를 방지하는 데 사용된다.
라운드 로빈 방식
요청을 차례대로 각 서버에 순서대로 분배하는 방식이다. 모든 서버에 동일한 양의 요청이 분배되므로 공평하게 부하를 분산시킬 수 있다. 그러나 서버의 성능이 다를 경우에는 부하 분배가 공평하지 않을 수 있다.
가중치 기반 방식
서버에 가중치를 할당하여 트래픽을 분배하는 방식이다. 가중치가 높은 서버에 더 많은 요청이 전달되어 부하를 균형있게 분산시킬 수 있다. 예를 들어, 성능이 우수한 서버에 더 높은 가중치를 할당하여 더 많은 요청을 처리하도록 유도할 수 있다.
최소 연결 수 방식
현재 연결 수가 가장 적은 서버에 요청을 전달하는 방식이다. 이 방식은 서버의 현재 상태를 고려하여 부하를 분산시킨다. 연결 수가 가장 적은 서버에 요청을 보내므로 응답 시간을 최소화하고 성능을 향상시킬 수 있다.
IP 해시 방식
클라이언트의 IP 주소를 해싱하여 고정된 서버에 요청을 전달하는 방식이다. 동일한 클라이언트는 항상 동일한 서버로 요청이 전달되므로 세션 유지가 필요한 경우 유용하다. 클라이언트가 변경되면 다른 서버로 요청이 전달되기 때문에 일부 세션 일관성을 제공할 수 있다.
유명한 웹 사이트는 하루에도 수백만명이 방문한다. 따라서 대량의 트래픽을 하나의 서버로 감당하기에 어려움이 많다.
리버스 프록시 서버를 통해 로드밸런싱을 할 수 있다.
리버스 프록시 서버(Reverse Proxy Server)는 클라이언트의 요청을 받아 내부 서버로 전달하는 역할을 하는 서버이다. 클라이언트는 리버스 프록시 서버에 요청을 보내면, 리버스 프록시 서버는 해당 요청을 처리하기 위해 내부 서버로 전달하고, 내부 서버로부터 받은 응답을 다시 클라이언트에게 전달한다. 이러한 구조로 인해 클라이언트는 내부 서버의 존재를 알 수 없으며, 리버스 프록시 서버가 클라이언트와의 모든 통신을 대행한다.
리버스 프록시 서버의 장점
로드 밸런싱
리버스 프록시는 여러 내부 서버 사이에서 클라이언트 요청을 분산시키는 로드 밸런싱 기능을 수행할 수 있다. 이를 통해 서버 부하를 분산시키고 성능을 향상시킬 수 있다.
캐싱
리버스 프록시는 클라이언트 요청에 대한 응답을 캐싱하여 내부 서버의 부하를 줄이고 응답 속도를 향상시킬 수 있다. 정적인 콘텐츠나 동일한 요청에 대한 응답은 캐시에 저장되어 바로 제공될 수 있다.
보안
리버스 프록시는 클라이언트와 내부 서버 사이에 위치하여 보안을 강화할 수 있다. 외부에서 직접적으로 내부 서버에 접근할 수 없으며, 보안 정책을 적용하여 내부 서버를 보호할 수 있다.
SSL 암호화
리버스 프록시는 클라이언트와의 연결에 SSL 암호화를 적용할 수 있다. 클라이언트와의 통신에서 암호화된 연결을 사용하므로 데이터의 안전성을 보장할 수 있다.
로깅 및 분석
리버스 프록시는 클라이언트와 내부 서버 간의 통신을 모니터링하고 로깅할 수 있다. 이를 통해 트래픽 분석, 문제 해결 및 보안 조치를 위한 정보를 수집할 수 있다.
포워드 프록시 서버(Forward Proxy Server)는 클라이언트의 요청을 받아 해당 요청을 대표하여 외부 서버로 전달하는 역할을 하는 서버이다. 클라이언트가 포워드 프록시 서버에 요청을 보내면, 프록시 서버는 해당 요청을 대신하여 외부 서버에 보내고, 외부 서버로부터 받은 응답을 다시 클라이언트에게 전달한다. 이러한 구조로 인해 클라이언트는 외부 서버와의 직접적인 통신을 갖지 않으며, 프록시 서버가 클라이언트와 외부 서버 간의 중개자 역할을 수행한다.
포워드 프록시 서버의 장점
익명성 보장
클라이언트가 포워드 프록시 서버를 통해 인터넷에 접속하면, 클라이언트의 실제 IP 주소가 외부로 노출되지 않는다. 외부 서버는 프록시 서버의 IP 주소만을 알 수 있으므로 클라이언트의 익명성이 보장된다.
캐싱
포워드 프록시 서버는 외부 서버의 응답을 캐싱하여 동일한 요청에 대한 응답을 바로 제공할 수 있다. 이를 통해 응답 속도를 향상시키고 외부 서버의 부하를 줄일 수 있다.
필터링 및 보안
포워드 프록시 서버는 특정 웹 사이트나 콘텐츠에 대한 접근 제어, 보안 정책 적용, 내부 네트워크 보호 등의 기능을 수행할 수 있다. 이를 통해 악성 사이트, 부적절한 콘텐츠, 보안 위협 등을 차단하거나 제한할 수 있다.
트래픽 관리
포워드 프록시 서버는 트래픽 관리 기능을 제공하여 대역폭 사용량을 제어하고, 트래픽을 조절할 수 있다. 이를 통해 네트워크 성능을 최적화하고 웹 서비스의 안정성을 유지할 수 있다.
로깅 및 분석
포워드 프록시 서버는 클라이언트와 외부 서버 간의 통신을 모니터링하고 로깅할 수 있다. 이를 통해 트래픽 분석, 문제 해결, 보안 조치 등에 활용될 수 있다.