네트워크 역방향 프록시 포워딩 서버 개념 정리
네트워크에서 서버와의 통신은 클라이언트에서 요청이 발생하는 경우 서버 간의 통신으로 요청-응답 패턴 형태로써 클라이언트는 서버에 요청을 보내고 서버는 요청된 데이터로 해당 요청에 응답을 하게 되는데 클라이언트와 서버는 HTTP라는 프로토콜을 사용하여 통신하게되는데 이는 웹 상의 데이터 통신의 기반이되고 텍스트나 이미지 또는 비디오 를 포함한 다양한 유형의 데이터를 전송하는 데에 사용됩니다
서버와 클라이언트
클라이언트가 서버에 요청을 보낼 때 주로 사용되는 요청 유형으로는 Get, POST, PUT, DELETE 등과 같이 요청된 리소스의 URL 및 요청에 필요한 추가 데이터를 포함시키며 서버는 요청을 수신하여 수신된 자료를 처리하여 클라이언트에 적절한 응답을 다시 보내주게 됩니다
서버의 응답에는 요청된 데이터와 함께 요청이 성공했는지의 여부를 나타내는 상태값을 가지는 코드가 포함되며 가장 일반적인 상태코드는 200(OK) 또는 404(찾을수없음) 그리고 500(내부서버장애) 코드로써 상태값을 가지게 됩니다 전반적으로 웹 기반 응용 프로그램과 서비스가 정확히 작동하려면 클라이언트와 서버 간의 통신은 필수적이게 되며 클라이언트는 요청을 보내고 서버는 요청된 데이터로 응답하므로 사용자는 웹 기반 리소스에 액세스하고 상호 작용을 가질 수 있습니다
성능향상, 보안강화, 익명제공 다목적의 프록시
프록시는 클라이언트와 다른 서버 간의 중개 역할을 하는 서버 또는 특정 서비스가 될 수 있으며 클라이언트가 프록시를 통해 서버로 요청을 보내면 프록시는 요청을 중간에 가로채 클라이언트를 대신하여 서버로 전달하게 됩니다 그 다음 서버는 요청에 응답하고 프록시는 응답을 클라이언트로 다시 전달함으로서 서로 통신함에 있어 중간 매개체가 되기도 합니다
프록시가 사용되는 목적인 대표적인 사례는 아래와 같습니다
- 캐싱 : 캐싱 프록시는 이미지 및 비디오와 같은 주로 요청되는 컨텐츠를 프록시 서버 자체에서 저장함으로써 반복되어 반환되는 데이터를 서버에서 연산되지않고 바로 전달함으로써 연산되는 데이터 양을 줄이고 성능을 대폭 향상시킬 수 있습니다
- 로드 밸런싱 : 로드 밸런싱 프록시는 수신 트래픽을 여러 서버에 분산함으로써 클라이언트의 많은 로드율을 각 서버에 분산시킴으로 서버에서의 성능과 신뢰성을 향상시킬 수 있습니다
- 필터링 : 필터링 프록시는 들어오는 트래픽을 차단하고 필터링하여 악의적인 요청을 차단하고 서버에 도달하지 못하도록 막아주며 이를 통해 DDoS, SQL 주입 및 사이트 간 스크립팅과 같은 공격으로부터 보호하여 보안을 보다 더 향상시킬 수 있습니다
- 익명성 : 익명 프록시를 사용하여 서버에서 클라이언트의 IP주소 및 기타 식별 정보를 숨길 수 있으며 중요하거나 제한된 컨텐츠에 접근시 개인 정보 및 보안 계층을 추가로 제공할 수 있는 이점을 가지게 됩니다
전반적으로 프록시란 웹 기반 응용 프로그램 및 또는 특정 서비스의 성능과 보안 및 개인정보 보호를 개선하고자 사용되는 다목적 도구로써 사용되게 됩니다
역방향 프록시 서버
역방향 프록시는 클라이언트와 웹 서버 사이에 위치하게 되며 클라이언트 요청을 적절한 때에 웹 서버로 전달하는 서버로써 클라이언트가 요청한 내용을 중간에 가로채 적절한 서버에 전송하여 중개 역할을 수행하게 되며 서버가 요청에 응답하면 역방향 프록시는 응답을 클라이언트로 다시 보내주게 됩니다
역방향 프록시와 일반 프록시는 기능적으로 유사하지만 동일하지는 않습니다 일반 프록시는 클라이언트와 인터넷 사이의 중개자 역할을 수행하며 클라이언트가 일반 프록시를 통해 웹서버로 요청을 보내면 프록시는 요청을 가로채 클라이언트를 대신하여 서버로 전달하게 되고 다음 응답을 클라이언트로 다시 전달함으로써 중개역할을 수행하게 되는 반면 역방향 프록시는 인터넷과 웹 서버 사이의 중개 역할을 수행함으로써 클라이언트가 역방향 프록시를 통해 웹 서버로 요청을 보내면 프록시는 요청을 가로채 적절한 웹서버로 전달하게되며 그런 다음 요청에 응답하고 역방향 프록시는 응답을 클라이언트로 다시 전달하게 됩니다
즉 일반 프록시는 포워딩 형태로써 클라이언트가 인터넷에 액세스하는 데 사용되는 반면, 역방향 프록시는 웹 서버가 클라이언트와 상호작용하는 데 사용되며 역방향 프록시는 성능, 보안, 확장성을 향상시키기 위해 웹 기반 응용 프로그램에서 일반적으로 사용되고 일반 프록시는 종종 익명성과 제한된 컨텐츠에 대한 접근을 제공하기 위해 사용하게 됩니다
역방향 프록시의 대표적인 사례 NginX
웹서버 구축시 가장 대표적으로 널리 사용되는 서비스는 NginX 일 것 입니다 NginX는 신뢰성, 확장성, 유연성으로 유명하며 고성능에 오픈 소스 리버스 프록시 서버로 로드밸런서, 웹 서버 및 역방향 프록시로 자주 사용되며 정적 컨텐츠를 제공하고 트래픽이 많은 웹 사이트를 처리하는 데 특히 많이 사용되게 됩니다
NginX는 아파치와 같은 웹 서버, Node.js 와 루비온 레일즈와 같은 응용 프로그램 서버, 워드프레스와 드루팔과 같은 컨텐츠 관리 시스템을 포함한 다양한 웹 기반 응용 프로그램과 서비스의 역 프록시 역할을 하도록 구성되어있으며 일반적으로 인터넷과 웹 서버 사이의 장벽 역할을 함으로써 웹 사이트의 보안을 향상시키는데 사용되기도 하고 NginX는 시스템 리소스를 효율적으로 사용하는 것으로 알려져 메모리 사용량이 적은 다수의 동시 연결을 빠른속도로써 처리할 수 있어 광범위한 구성 옵션을 통해 사용자 지정이 가능합니다
따라서 대표적으로 사용되는 웹 서비스인 Apache와 Nginx는 종종 역방향 프록시 샌드위치 구성으로 함께 사용되며 Ngnix서비스는 Apache 앞에서 역방향 프록시 역할을 함으로 해당 구성은 Ngninx의 정적 컨텐츠의 효율적인 처리와 높은 동시성을 활용하는 동시에 아파치가 동적 컨텐츠를 처리하고 서버 측 스크립트를 실행할 수 있도록 하여 Nginx는 들어오는 요청을 처리하고 필요에 따라 Apache로 전달하는 동시에 로드 밸런싱 및 캐싱과 같은 작업을 처리하는 Apache의 프론트 엔드 역할을 수행하게 됩니다 따라서 Apache와 Ngnix를 모두 사용하는 경우 웹 사이트 성능과 보안 및 확장성을 향상시킬 수 있으며 개발자와 시스템 관리자는 두 서버의 장점을 모두 활용하여 광범위한 트래픽과 사용 패턴을 처리할 수 있는 견고하고 신뢰 할 수 있는 웹 인프라를 구축할 수 있습니다