Computer Science/Network

[Network] Forward proxy vs Reverse proxy

HJChung 2021. 1. 18. 04:50

Proxy, Proxy 프로그램, Proxy 서버

Proxy는 자신을 '통해서' 다른 네트워크에 간접적으로 접속 할 수 있도록 '중계'해주는 컴퓨터 혹은 프로그램이다.

그리고 이러한 일을 하는 프로그램을 Proxy 프로그램이라 하며, Proxy 프로그램은 Proxy Server에서 작동한다.

출처: What is a web proxy server?

Proxy의 종류

Proxy에는 Forward ProxyReverse Proxy가 있다.

1) Forward Proxy

일반적으로 사용하는 Proxy방식이며 클라이언트와 애플리케이션 서버 사이에 위치해서 클라이언트가 애플리케이션 서버로 서비스를 요청 할 때 내부망(아래 사진에서 남색으로 표시)에 위치한 Proxy Server에서 먼저 요청을 받고, Proxy Server가 타겟인 애플리케이션 서버로 요청을 전달한다. 그리고 나서 요청에 대한 응답을 클라이언트에 전달(forward)해준다.

출처: Forward Proxy vs. Reverse Proxy JSCAPE

이렇게 하는 것의 장점은 클라이언트가 서버에 직접 접근하는 것을 막고, 서버가 응답받은 IP은 Proxy Server의 IP이기 때문에 서버는 클라이언트가 누군지 알 수 없다. 또한 Proxy Server가 중간에서 requests, responses, their sources and their destinations들을 추적할 수 있고 정해진 사이트만 연결하게 설정하는 등웹 사용 환경을 제한할 수 있으므로 기업 환경등에서 많이 사용한다.

 

그리고 Forward Proxy는 Cache 기능이 있어서 앞서 [Network] CDN(Contents Delivery Network) 이해하기에서도 나왔던 Cache의 장점을 가지고 있다. 즉 Cache되어 있는 것은 Origin Server에 다시 요청하지 않아도 되기 때문에 통신 속도 개선이 된다.

 

앞선 웹 사용환경 제한과 Cache기능으로 불필요한 외부와의 연결을 줄여서 트래픽으로 인한 네트워크 병목 현상을 방지할 수도 있다.

Forward Proxy의 네트워크 흐름에 대한 설명은 이 글에 잘 나와 있다.

2) Reverse Proxy

Forward Proxy와 다르게 클라이언트는 타겟 애플리케이션 서버의 URL(아래 그림에서는 mail.a.com,bbs.a.com 등)이 아닌 Proxy Server(아래 그림에서 www.abc.com)의 URL로 요청을 보낸다. 이 요청을 받은 Proxy Server는 내부망 내의 URI에 매핑된 타겟 애플리케이션 서버로 요청을 중계해준다. 그리고 나서 요청에 대한 응답을 클라이언트에 전달(forward)해준다. 

출처: www.joinc.co.kr/w/Site/System_management/Proxy
출처: Forward Proxy vs. Reverse Proxy JSCAPE

In effect, whereas a forward proxy hides the identities of clients, a reverse proxy hides the identities of servers.

이렇게 함으로써클라이언트는 서버를 알 수 없으므로 서버의 정보가 보안된다는 것은 물론 Reverse Proxy는 서버의 로드 밸런서 역할을 하여 요청을 분산 처리해주는 역할도 한다.

 

그 외에도 HTTPS의 인증서 관리를 하나의 Proxy Server가 담당하고 뒤에 동작하고 있는 애플리케이션 서버는 HTTP로 서비스하게 하여서 서버를 실행할 때마다 인증서를 관리할 필요가 없도록 할 수 있다는 장점도 있다.

Nginx와 Reverse Proxy

SAFU 프로젝트 서비스 배포 환경을 구축하면서 [NGINX] EC2에 nginx 설치 및 세팅에서 NginxReverse Proxy로 사용했었다. Proxy에 대해 공부하고나서

이 두 그림을 보니 이제서야 저 Reverse Proxy가 어떤 의미였는지 더 잘 보인다.

그 때 Nginx 설정 파일을 아래 코드와 비슷한 형태로 수정해 주었었는데, 그때는 무슨 의미인지 완벽히 파악도 못한 채 무작정 되게만 하기 바빴다. 그런데 이제는 아~주 조금 알겠다.

아래 코드을 해석해보면,

출처: Nginx를 사용하여 프록시 서버 만들기 - jeff0720

'클라이언트가 54.180.102.122:80라는 Proxy Server 주소로 요청하면 현재 같은 내부망에서 실행되고 있는 http://127.0.0.1:3000 으로 요청을 중계해준다.'(Reverse Proxy) 는 의미이다.

 

 

아직 '내부망'이라는 개념이 잘 와닿지는 않지만 공부한 만큼 점점 보이는게 정말 재미있다 🙂

 

reference

www.joinc.co.kr/w/Site/System_management/Proxy

Nginx를 사용하여 프록시 서버 만들기

What is a web proxy server?

Forward Proxy와 Reverse Proxy 차이점

Forward Proxy vs. Reverse Proxy JSCAPE

포워드(Forward) 프록시와 리버스(Reverse) 프록시

앞으로 더 공부하고 싶은 것

NGINX로 HTTPS PROXY 서버 만들기

Nginx를 이용한 forward proxy 구현