웹 프록시(Web Proxy)는 중개자라고 불립니다.
여기서는 웹 프록시가 어떤 것인지와 어떤 역할을 수행하는지 알아보도록 하겠습니다.
자세한 내용을 살펴보기 전에 우선 핵심적인 내용들만 정리를 하고 들어가도록 하겠습니다.
프록시 서버(Proxy Server)는 클라이언트와 다른 서버 사이에서 중계자 역할을 하는 서버입니다.
중계자라는 것은 클라이언트 요청을 받아 해당 요청을 대신하여 원하는 서버로 전송하고, 그 서버의 응답을 다시 클라이언트에게 전달해주는 역할을 수행하기 때문입니다.
데이터의 흐름 제어도 수행을 하는데, 프록시 서버는 필요에 따라 요청이나 응답을 변경하거나 필터링할 수 있습니다.
주요 역할을 정리해보자면 다음과 같습니다.
크게 보자면 종류는 이와 같습니다.
웹 프록시 서버는 클라이언트 입장에서 트랜잭션을 수행하는 중개인입니다.
여기서는 프록시의 종류를 사용하는 클라이언트의 수로 구분하여 나눠놨습니다.
프록시와 게이트웨이는 크게 차이가 있는 것 같지 않지만, 목적에서 차이가 존재합니다.
프록시 서버는 중계자 역할을 수행하지만, 게이트웨이 서버는 다른 네트워크 사이에서 통신을 가능하게 하는 역할을 수행합니다.
게이트웨이는 이러한 목적을 가지고, 프로토콜을 변환하거나 다른 네트워크 기술로 변환해주는 등의 작업을 수행합니다.
프록시 서버는 캐싱, 요청 필터링, 사용자 인증, 안전성 강화 등을 이용해서 성능 개선 및 사용자 경험 개선과 같은 목적을 통해 사용하고, 게이트웨이 서버는 통신의 다리 역할을 수행한다고 보면 됩니다.
위에서 언급했지만, 프록시의 사용 효과는 여러 가지 있습니다.
책에서 언급되는 대표적인 예를 정리해보자면,
어린이 필터, 문서 접근 제어자, 보안 방화벽, 웹 캐시, 대리 프록시, 콘텐츠 라우터, 트랜스코더, 익명화 프록시 등을 언급했습니다.
몇 개만 내용을 정리해보자면,
문서 접근 제어자의 경우 프록시를 사용해서 각 사용자의 요청을 추적하고 제한하는 역할을 수행하도록 하는 프록시입니다.
콘텐츠 라우터는 사용자들에게 제공할 여러 서비스들을 구분하여 더 좋은 서비스를 신청한 사용자들에게는 요청에 가까운 캐시 서버로 라우팅 해주는 작업 등을 수행합니다.
트랜스 코더는 콘텐츠를 클라이언트에게 전달하기 전에 본문 포맷을 수정하여 전달하는 작업을 수행합니다.
트랜스코딩: 데이터의 표현 방식을 자연스럽게 변환하는 것
마지막으로 익명화 프록시는 HTTP 메시지에서 신원을 식별할 수 있는 특성들을 적극적으로 제거함으로써 개인 정보 보호와 익명성 보장에 기여합니다.
책에서는 프록시를 배치하는 몇 가지 방법에 대해서 언급하고 있습니다.
로컬 네트워크의 출구
에 박아 넣을 수 있습니다.ISP 접근 지점
에 위치하기도 합니다.네트워크의 가장 끝에 있는 웹 서버들의 바로 앞에 위치
하여 웹 서버로 향하는 모든 요청을 처리하고 필요할 때만 웹 서버에게 자원을 요청할 수 있습니다.네트워크 사이의 인터넷 피어링 교환 지점들
에 놓일 수 있습니다.클라이언트와 서버 사이에 놓일 수 있는 프록시는 여러 개가 존재할 수 있으며 인바운드 프록시(부모)와 아웃바운드 프록시(자식)으로 구분될 수 있습니다.
인바운드 프록시: 서버에 가까운 쪽 프록시
아운바운드 프록시: 클라이언트에 가까운 쪽 프록시
자식 프록시가 선택할 수 있는 부모 프록시가 여러 개라면 다음과 같은 고려사항을 통해서 선택할 수 있을 것입니다.
이렇게 프록시가 다른 프록시를 선택하는 방식은 살펴보았습니다.
프록시를 적절히 배치를 했다고 해도, 프록시가 사용되도록 설정되어 있지 않다면 클라이언트 요청은 프록시를 거쳐가지 않을 것입니다.
프록시를 사용하도록 설정하는 방법에는 다음 4가지 방식을 언급 해놓았습니다.
클라이언트를 수정한다.
네트워크를 수정한다.
DNS 이름강간을 수정한다.
웹 서버를 수정한다.
이 부분은 간단하게만 정리하도록 하겠습니다.
클라이언트가 프록시를 사용하도록 설정하는 방법에는 여러 가지가 있습니다.
수동 방식은 간단하지만 여러가지 단점을 가지고 있습니다.
따라서, 동적인 해결책으로 프록시 자동 설정(PAC) 파일을 사용하여 상홍에 맞게 계산해줍니다.
WPAD는 브라우저는 URI로부터 PAC 파일을 가져와서 실행하기 때문에 이 동작을 수행하기 위해 사용됩니다. WPAD는 올바른 PAC 파일을 알아내기 위해 일련의 리소스 발견 기법을 사용합니다.
여기서는 URI와 관련하여 프록시를 사용했을 때와 사용하지 않았을 때 어떠한 차이가 존재하는지 설명하고 있습니다.
위에서 언급했던 것과 같이 사용자가 프록시 서버를 사용하는 방식으로 4가지가 존재하는 것을 확인했습니다.
일반적으로 클라이언트가 서버로 요청을 보낼 때의 요청 메시지의 URI를 확인해보면, 상대 주소로 되어 있는 경우가 많습니다.
이렇게 사용이 가능한 이유는 Connection 기반의 통신을 통하여 Layer 4의 IP 주소를 통해서 패킷이 전송되고 Layer 7에서 별도의 라우팅 작업을 수행할 필요가 없기 때문입니다.
하지만, 프록시 서버는 Layer 7에서 동작하는 라우팅 기능 및 필요 동작을 수행하기 때문에 전체 주소(절대 주소)를 요구합니다.
이와 같은 비슷한 예시로, 가상 호스팅에서 도메인을 구분하기 위해서 Host
헤더를 사용하는 것을 확인할 수 있었습니다.
물론, 프록시를 원할하게 사용하기 위해서 무조건 절대 주소를 사용해야 되는 것은 아닙니다. 인터셉트 프록시의 경우, 클라이언트가 웹 서버로 보내는 요청을 도중에 가로채서 작업을 수행하기 때문에 이 경우 요청은 상대 주소로 되어 있을 것입니다.
완전 URI와 부분 URI를 사용하는 규칙은 다음과 같습니다.
앞 장에서 'URI 확장'에 대해서 언급했었는데, 클라이언트는 부분적인 URI를 입력하여 성공적으로 호스트 명을 확장했고 그 요청을 보낼 때 그것을 인터셉트 프록시가 가로챌 수 있습니다.
이러한 경우에 해당 서버의 상태를 프록시 서버가 관리하고 있고, 요청을 적절하게 수행할 수 있는 서버로 해당 요청을 전달하는 기능을 수행할 수 있습니다.
여기서는 메시지를 추적하기 위해서 제공하는 방법에 대해서 언급하고 있습니다.
Via 헤더 필드는 메시지가 지나는 각 중간 노드(프록시나 게이트웨이)의 정보를 나열합니다.
Via 헤더 필드의 문법은 쉼표로 구분된 경유지(waypoint)의 목록이고, 이것은 자신을 가리키는 유일한(unique) 문자열이 경유지로 담기게 됩니다.
해당 필드를 사용하여 이전까지 지나온 중계자들이 어떤 버전을 다룰 수 있는지 알 수 있고, 프로토콜 변환이 일어났는지 확인할 수 있습니다.
Trace 메서드는 요청 메시지를 프록시의 연쇄를 따라가마녀서 어떤 프록시를 지나가고 어떻게 각 프록시가 요청 메시지를 수정하는지 관찰/추적할 수 있도록 해줍니다.
Trace는 프록시의 흐름을 디버깅 하는데 매우 유용합니다.
TRACE와 OPTIONS 요청의 프록시 홉의 수를 제한하기 위해 Max-Forwards 헤더를 사용할 수 있는데, 이는 전달되는 메시지가 무한 루프에 빠지지 않는지 프록시 연쇄를 테스트 하거나 연쇄 중간의 특정 프록시 서버들의 효과를 체크할 때 유용합니다.
이후 프록시를 이용하여 인증하는 방법이나 프록시를 사용하면서 원할하게 서버와 통신하는 방법을 제시하고 있다.
프록시를 접근 제어 장치로 사용할 경우, 407 Proxy Authorization Required
상태 코드를 접하게 될 것입니다.
프록시는 이것을 이용하여 요구되는 자격을 사용자로부터 받아오면서 동작하게 되빈다.
앞서 말했던 것과 같이 프록시는 클라이언트와 서버 사이에 이루어지는 통신을 이해하지 못할 수 있기 때문에 OPTIONS
메서드를 활용해서 클라이언트는 서버의 능력을 알아낼 수 있습니다.