HTTP 완벽 가이드 - 6 프록시
2025/03/02
n°66
category : HTTP
☼
2025/03/02
n°66
category : HTTP

Cloudflare를 자주 쓰면서도, 공식 문서의 이 글을 읽고 표면적으로만 이해할 수 있었다. 이번 챕터에서 프록시를 자세하게 다루었다. 궁금증이 들 때마다 다시 읽어보면 좋겠다.
웹 프록시 서버는 클라이언트의 입장에서 트랜잭션을 수행하는 중개인.
프록시 없이 클라이언트는 서버와 직접 대화
있다면 클라이언트는 프록시와 대화
프록시는 웹 서버이면서 웹 클라이언트이기도 하다
서버처럼 클라이언트에서 요청과 커넥션을 다루고 응답을 보내며, 클라이언트처럼 서버로 요청을 보내고 응답을 받는다.
따라서 HTTP 클라이언트와 서버 양쪽 규칙을 준수해야한다
프록시 서버는 하나의 클라이언트가 독점적으로 사용할 수도, 여러 클라이언트가 공유할 수도 있다.
개인 프록시 / 공용 프록시로 나뉜다.
대부분의 프록시는 공용이며 공유된다
중앙 집중형 프록시를 관리하는 것이 더 비용효율이 높고 쉽다
캐시 프록시 서버와 같은 몇몇 프록시는 공용이 유리하다. 여러 사용자들의 공통된 요청에서 이득을 볼 수 있기 때문이다.
흔하지 않지만 꾸준히 사용됨
용도: 브라우저의 기능을 확장, 성능을 개선, 무료 ISP 서비스 등등..
추가: 사용자의 컴퓨터를 익명으로 유지, 원치 않는 사이트 접근을 차단,
** ISP 서비스 (Internet Service Provider)
인터넷 서비스 제공자 서비스
프록시: 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결
게이트웨이: 서로 다른 프로토콜을 사용하는 둘 이상을 연결. 클라이언트와 서버가다른 프로토콜로 말하더라도 서로 간의 트랜잭션을 완료할 수 있도록 해주는 프로토콜 변환기처럼 동작
이전 글 참조*
때때로 프록시에서 SSL 보안 프로토콜, SOCKS 방화벽, FTP 접근 등 웹 기반 애플리케이션 지원을 위해 게이트웨이를 구현하여 경계가 모호할 때도 있다.
실용적이고 유용한 기능을 위해. 보안, 성능, 비용 개선을 포함
모든 프록시 서버는 HTTP 트래픽을 읽고 수정할 수 있기에 부가가치 창출을 위해 사용됨.
다음 예시를 살펴보자.
어린이에게 안전하지 않은 사이트만 차단하는 필터링 프록시를 사용할 수 있음.
부적절한 사이트 접근은 프록시를 통해 강제로 거부할 수 있음
프록시는 많은 웹 서버들과 웹 리소스에 대한 단일한 접근 제어 전략을 구현하고 감사 추적(audit trail)을 위해 사용될 수 있다.
중앙화된 접근 프록시 서버를 통해 여러 클라이언트, 서버를 일일히 제어할 필요없이 프록시 한 곳에서 접근 제어를 설정할 수 있다.
대기업 환경, 분산된 관료 조직 등에서 유용함
ex) 클라이언트 A에게는 제약 없이 뉴스 웹사이트 접근 만을 허용, B에게는 제약 없이 인터넷 컨텐츠 허용, C에게는 서버 B에 접근하기 전 비밀번호를 요구. 이러한 설정을 프록시에서 한번에 할 수 있다.
종종 보안을 강화하기 위해 사용.
조직 안에 들어오거나 나가는 응용 레벨 프로토콜 흐름을 네트워크 한 지점에서 통제.
바이러스를 제거하는 웹, 이메일 프록시는 트래픽을 세심히 살펴볼 수 있는 웹훅을 제공함
프록시 캐시는 인기있는 문서의 로컬 사본을 관리하고 해당 문서에 대한 요청이 오면 빠르게 제공할 수 있음
클라이언트와 더 가까운 위치에서 캐시를 제공하여 빠르고 저렴하게 리소스를 보낼 수 있음
웹 서버인 것처럼 위장하는 프록시. 대리 혹은 리버스 프록시, 서버 가속기라고도 불린다.
요청을 받지만 요청 받은 컨텐츠의 위치를 찾아내기 위해 다른 서버와 커뮤니케이션을 시작한다.
공용 컨텐츠에 대한 느린 웹 서버의 성능을 개선하기 위해 사용될 수 있다. 이런 식으로 사용하는 대리 프록시를 서버 가속기라고부른다.
컨텐츠 라우팅 기능과 결합되어 주문형 복제 컨텐츠의 분산 네트워크를 만들기 위해 사용될 수 있음
추가: 예시로 Cloudflare CDN이 리버스 프록시를 사용한다
인터넷 트래픽 조건과 컨텐츠 종류에 따라 요청을 특정 웹 서버로 유도하는 컨텐츠 라우터로 동작할 수 있음
컨텐츠 라우터는 여러 맞춤형 서비스를 구현하는데 사용될 수 있다.
ex) 더 높은 성능을 위해 돈을 지불했다면, 컨텐츠 라우터는 요청을 더 가까운 복제 캐시로 전달.
ex2) 필터링 서비스에 가입했다면 HTTP 요청이 필터링 프록시를 통과하도록 할 수 있다.
컨텐츠를 클라이언트에 전달하기 전에 본문 포맷을 수정할 수 있다.
데이터 표현방식을 자연스럽게 변환하는 것을 트랜스코딩이라고 부른다
ex) 트랜스코딩 프록시는 크기를 줄이기 위해 자신을 거쳐가는 GIF 이미지를 jpeg로 변환할 수 있다. 이미지의 크기를 줄이거나 색을 변환하는 등. 텍스트 파일을 압축하거나 스마트폰같은 작은 기기에 맞게 작은 텍스트로 수정할 수 있다.
익명화 프록시는 HTTP 메시지에서 신원을 식별할 수 있는 특성을 적극적으로 제거하여 개인정보 보호와 익명성 보장에 기여할 수 있다.
제거 대상 : 클라이언트 IP 주소, From 헤더, User-Agent 헤더, Referer헤더, 쿠키, URI 세션 아이디 등등
어떻게 프록시가 네트워크 아키텍처 상 어디에 배치되는가
어떻게 프록시의 연쇄가 계층을 이루는가
사용처에 따라 프록시는 어디에든 배치할 수 있다.
로컬 네트와크와 더 큰 인터넷 사이를 오가는 트래픽을 제어하기 위해 프록시를 로컬 네트워크의 출구에 둘 수 있다.
ex) 회사 밖의 악의적인 해커들을 막는 방화벽을 제공하거나, 인터넷 요금을 절약하고 트래픽 성능을 개선하기 위해 출구 프록시를 사용할 수 있다
ex2) 초등학교에서 부적잘한 컨텐츠를 브라우징하는 것을 막기 위한 필터링 출구 프록시
고객으로부터 모든 요청을 종합적으로 처리하기 위해 ISP 접근 지점에 위치하기도 한다
ISP는 사용자들의 다운로드 속도를 개선하고, 인터넷 대역폭 비용을 줄이기 위해 캐시 프록시를 사용
네트워크의 가장 끝에 있는 웹 서버들의 바로 앞에 위치하여 웹 서버로 향하는 모든 요청을 처리하고 필요할 때만 서버에 자원을 요청한다.
보안 기능을 추가하거나, 웹 서버 캐시를 느린 웹 서버 앞에 두어 성능을 개선할 수 있다.
일반적으로 웹 서버의 이름과 IP 주소로 스스로를 가장하기 때문에, 모든 요청은 서버가 아닌 이 프록시로 간다.
추가 자료: 역방향 프록시는 하나 이상의 웹 서버 앞에 위치하여 클라이언트의 요청을 가로채는 서버입니다. 이것은 프록시가 클라이언트 앞에 위치하는 정방향 프록시와 다릅니다. 역방향 프록시를 사용하면 클라이언트가 웹 사이트의 원본 서버에 요청을 보낼 때 역방향 프록시 서버가 네트워크 에지에서 해당 요청을 가로챕니다. 그런 다음 역방향 프록시 서버가 원본 서버에 요청을 보내고 응답을 받습니다. 정방향 프록시와 역방향 프록시의 차이는 미묘하지만, 중요합니다. 요약하면 정방향 프록시는 클라이언트 앞에 위치하며 원본 서버가 해당 특정 클라이언트와 직접 통신하지 못하도록 하는 것입니다. 반면에 역방향 프록시는 원본 서버 앞에 위치하며 어떤 클라이언트도 원본 서버와 직접 통신하지 못 하도록 합니다.
참고 자료 : https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/
캐시를 이용해 인터넷 교차로의 혼잡을 완화, 트래픽 흐름을 감시하기 위해, 충분한 처리 능력을 갖춘 프록시가 네트워크 사이의 인터넷 피어링 교환 지점들에 놓일 수 있다.
프록시 계층이라고 불리는 연쇄를 구성할 수 있음
메시지는 최종적으로 원 서버에 도착할 때까지 프록시들을 거쳐 이동, 클라이언트로 돌아갈 때도 마찬가지
계층에서 부모와 자식 관계를 갖는다. 인바운드 프락시(서버에 가까운 쪽)를 부모, 아웃바운드(클라이언트에 가까운 쪽)을 자식으로 부른다.
프록시 계층은 정적이다.
정적 계층 : 프록시 자식은 항상 부모 프록시에게로 메시지를 보낸다.
동적 부모 선택 : 하지만 여러 판단 근거에 의해 메시지를 다양하고 유동적인 프록시나 원 서버들의 집합으로 보낼 수 있다.
ex) 요청된 객체가 컨텐츠 분산을 위해 돈을 지불한 웹 서버에 속한 경우, 프록시는 요청을 가까운 캐시 서버에 보내 캐시된 객체를 반환하거나 캐시가 없을 때 원 서버에서 가져오게 함
ex2) 요청이 특정 종류의 이미지인 경우, 접근 프록시는 그 요청을 특화된 압축 프록시에 보내어 느린 모뎀으로 접속했더라도 빠르게 클라이언트가 다운로드할 수 있게함
동적 부모 선택의 예시는 다음이 있다.
부하 균형
자식 프록시는 부하를 분산하기 위해 현재 부모들의 작업량 수준에 근거하여 부모 프록시를 고를 수 있다
지리적 인접성에 근거한 라우팅
자식 프록시는 원 서버의 지역을 담당하는 부모를 선택할 수 있다
프로토콜/타입 라우팅
어떤 자식 프록시는 URI에 근거하여 다른 부모나 원 서버로 라우팅 할 수 있다.
어떤 특정 종류의 URI를 갖고 있는 요청의 경우, 특별한 프록시 서버로 보내져 특별한 프로토콜로 처리될 수 있다
유료 서비스 가입자를 위한 라우팅
웹 서비스 운영자가 빠른 서비스를 위해 추가금을 지불했다면, 대형 캐시나 성능 개선을 위한 압축 엔진으로 라우팅 될 수 있다.
동적 부모 라우팅 로직은 제품(설정 파일, 스크립트 언어, 동적으로 실행 가능한 플러그인 등)마다 다르게 구현된다.
클라이언트는 보통 서버와 직접 대화하기 때문에, 어떻게 HTTP 트래픽이 프록시로 향하는 길을 찾아내는지 설명할 필요가 있다.
클라이언트 트래픽이 프록시로 가는 방법은 4가지가 있다
구글 크롬, 엣지 등 브라우저를 포함한 많은 클라이언트는 수동 혹은 자동 프록시 설정을 지원함
클라이언트가 프록시를 사용하도록 설정되어 있다면, HTTP 요청을 의도적으로 원서버가 아닌 프록시로 보낸다
클라이언트를 모르고, 간섭할 수 없는 상태에서 네트워크 인프라를 가로채 웹 트래픽을 프록시로 가도록 조정하는 방법. 일반적으로 인터셉트 프록시라고 부름
이 가로챔은 일반적으로 HTTP 트래픽을 지켜보고 가로채어 클라이언트 모르게 트래픽을 프록시로 보내는 스위칭, 라우팅 장치를 필요로함
대리(리버스) 프록시는 웹 서버의 이름과 IP 주소를 자신이 직접 사용
모든 요청은 서버 대신 대리 프록시로 간다
DNS 이름 테이블을 수동으로 편집하거나, 사용할 적절한 프록시나 서버를 계산해주는 동적 DNS 서버를 이용해 조정될 수 있음
HTTP 리다이렉션 명령(상태코드 305)를 클라이언트에게 돌려주어 클라이언트 요청을 프록시로 리다이렉트하게 설정할 수 있다. 리다이렉트를 받는 즉시 프록시와 트랜잭션을 시작한다
수동 설정
프록시를 사용한다고 명시적으로 설정
많은 웹 클라이언트는 프록시를 수동으로 설정하도록 함
구글 크롬: 설정 > 고급 설정 표시 > 프록시 설정 변경.. 에서 프록시를 설정함
다른 브라우저도 아이디어는 동일하다. 프록시의 호스트와 포트 지정.
단순하지만 유연하지 못함...