프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 점속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
프록시(Proxy)란 대리 라는 의미를 갖고 있으며, 서버와 서버사이의 중계 역할을 한다고 보면 된다. 프록시를 사용하는 이유는 보안상의 이유로 직접 통신할 수 없는 두 점사이에서 대리로 통신을 수행하며 보안성, 성능, 안정성을 향상 시키기 위해서 이다.
보통 웹은 클라이언트에서 서버로, 서버에서 클라이언트로 통신하며 데이터를 전달한다. 이 때 필연적으로 중복되는 데이터를 반복하여 전달하는 상황이 발생하게 된다. 이렇게 동일한 요청을 매번 처리하는 것은 리소스 낭비와 부하로 이어지게 된다.
이러한 문제를 해결하기 위해 클라이언트와 서버 사이에 프록시 서버를 배치하여 중복 요청에 대하여 동일한 응답을 할 수 있다면, 클라이언트에겐 빠른 속도의 서비스 및 서버에게 불필요한 부하를 줄이는 효과를 낼 수 있다.
프록시 서버는 네트워크 상 어디에 위치하느냐, 혹은 어느 방향으로 데이터를 제공하느냐에 따라 Forward Proxy, Reverse Proxy로 나뉜다.
포워드 프록시 서버는 위의 그림과 같이 클라이언트 바로 뒤에 놓여 있다. 클라이언트가 요청을 할 경우 요청을 하는 서버로 바로 가는 것이 아니라 요청 서버의 주소를 포워드 프록시에 전달을 하게 된다.
이 후 포워드 프록시가 요청 서버로 부터 리소스를 응답받아 클라이언트에게 전달을 해준다.
보안 : 클라이언트는 포워드 프록시를 통해서만 외부에 요청을 하기 때문에 클라이언트가 해당 서버 혹은 웹 사이트에 직접적으로 접근하는 것을 방지할 수 있다. 대표적인 예가 클라이언트가 특정 사이트에 접근할 수 없도록 막을 수 있는 기능이다.
캐싱 : 클라이언트가 요청을 할 경우, 포워드 프록시는 해당 요청을 캐싱하여 다른 클라이언트 혹은 동일한 요청이 들어올 경우 캐싱된 데이터를 전달해준다. 이렇게 되면 클라이언트는 캐싱된 데이터를 받아오기 때문에 서버에 부하를 줄일 수 있다.
암호화 : 클라이언트의 요청은 포워드 프록시 서버를 통과할 때 암호화 된다. 암호화 된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되는데, 이는 클라이언트의 ip를 숨길 수 있다는 장점이 있다. 요청을 받은 서버에서 ip를 역 추적해도 포워드 프록시 서버의 ip만 알 수 있게 된다.
리버스 프록시는 위의 그림처럼 웹 서버 앞에 놓여 있는 것을 이야기 한다. 클라이언트는 웹 서비스를 접근할 때 웹 서버에 요청을 하는 것이 아닌 프록시로 요청을 하게 되고, 프록시가 웹 서버에 요청을 하여 리소스에 접근하는 방식이다.
내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안 때문이다. 네트워크 환경에서 DMZ가 존재한다. 웹 서버를 DMZ에 놓고 사용을 할 수 있지만 웹 서버는 통상적으로 DB에 연결이 되어 있으며 웹 서버에 대한 공격이 DB 까지 이어질 수 있다.
따라서 통상적으로 리버스 프록시를 DMZ에 두고 실제 서비스 서버는 내부망에 위치시킨 후 서비스를 제공한다.
DMZ : 내부, 외부 네트워크 둘 다 접근할 수 있는 공간
로드 밸런싱 : 서버의 트래픽이 몰리게 되면 하나의 서버로는 해당 요청을 감당하기 힘들어 지는 경우가 발생한다. 이럴 때 여러 대의 서버를 두고 요청을 분산시키는 것이 로드 밸런싱이다. 리버스 프록시는 여러 대의 서버에 분산시켜 요청을 보내게 된다. 이렇게 하면 서버의 부하를 분산시킬 수 있다.
보안 : 리버스 프록시는 웹 서버 앞에 놓이기 때문에 웹 서버에 직접 접근하는 것이 아닌 리버스 프록시를 통해 접근하게 된다. 이렇게 되면 웹 서버의 IP를 노출시키지 않을 수 있기 때문에 웹 서버에 대한 1차적인 공격을 막을 수 있다. (Proxy 서버의 IP만 노출)
캐싱 : 리버스 프로시 또한 프록시 서버에 캐싱되어 있는 데이터를 사용하여 클라이언트에 대한 요청을 처리할 수 있게 된다. (포워드 프록시 캐싱과 비슷한 기능이기도 하며 프록시 서버의 본래 기능이다.)
SSL Offloading : SSL Offloading은 SSL 암호화를 해제하는 기능이다. SSL 암호화는 서버와 클라이언트 간에 데이터를 주고 받을 때 암호화를 하는 것이다. SSL Offloading은 리버스 프록시 서버가 SSL 암호화를 해제하고 웹 서버에는 암호화가 해제된 데이터를 전달하는 것이다. 이렇게 되면 웹 서버는 SSL 암호화를 해제하는 부담이 없어지기 때문에 웹 서버의 부하를 줄일 수 있다.
Forward Proxy 서버는 클라이언트 앞에 놓여져 있는 반면 Reverse Proxy 서버는 웹 서버 앞에 놓여 있다는 차이점이 있다.
Forward Proxy는 내부망에서 외부망으로 접근할 때 사용되고 Reverse Proxy는 외부망에서 내부망으로 접근할 때 사용된다.