본문 바로가기

Development/Network & Web

[Network] 프록시(proxy)란? 포워드 프록시(forward proxy), 리버스 프록시(reverse proxy)

아파치 웹서버(apache web server) 에는 mod_proxy 라는 모듈에서 forward proxy 와 reverse proxy  두 가지 기능을 제공하며 nginx 는 필요한 기능만 제공하는 고성능 웹 서버에 맞게 reverse proxy 기능만 제공합니다.

 

프록시(Proxy)

프록시는 "대리"의 의미로, 자신을 통해서 다른 네트워크에 간접적으로 접속할 수 있도록 해주는 컴퓨터 혹은 프로그램을 가리킨다. 인터넷과 관련해서 쓰이는 경우, 특히 내부 네트워크에서 인터넷 접속을 할 때에, 빠른 액세스나 안전한 통신등을 확보하기 위한 중계서버를 "프록시 서버"라고 일컫는다.

클라이언트와 Web서버의 중간에 위치하고 있어, 대신 통신을 받아 주는 것이 프록시 서버이다.

 

프록시의 종류

요약하면 포워드 프록시는 클라이언트 앞에 위치하며 원본 서버가 해당 특정 클라이언트와 직접 통신하지 못하도록 하는 것이다. 반면에 리버스 프록시는 원본 서버 앞에 위치하며 어떤 클라이언트도 원본 서버와 직접 통신하지 못 하도록 한다.

Forward Proxy

예를 들어 사용자가 google.com 에 연결하려고 하면 사용자 PC 가 직접 연결하는게 아니라 포워드 프록시 서버가 요청을 받아서  google.com 에 연결하여 그 결과를 클라이언트에 전달(forward) 해준다. 포워드 프록시는 캐시 기능을 사용하기 때문에 캐시 서버로 활용하여 성능을 향상할 수 있다.

 

Reverse Proxy

역방향 프록시를 사용하면 사용자가 example.com 웹서비스에 데이터를 요청하면, 리버스프록시서버(E)는 요청을 원본서버(F)에게로 보내며 F로부터 응답을 받는다. E는 그런 다음 응답받은 데이터를 D에게 전달한다. 접근하는 사용자는 실제로 어디에 접근하는지는 관계가 없고, 운영자가 제공해준 방법에 따라서 serving을 할 수 있으므로 보안이 뛰어나고 로드 밸런싱을 통해 부하를 줄일 수 있다.

 

리버스 프록시 설정파일 예시

nginx는 /etc/nginx/nginx.conf 파일의 설정을 통해서 구동된다. 이 설정에서 우리는 proxy 설정을 할 수 있다. 이 글에서는 nginx.conf 파일로 간주한다. 추가적으로 site-modules/에 분리하는 등의 방법이 있고, 이에 대한 것은 https://min-devlog.tistory.com/42 에서 예시를 확인할 수 있다.

nginx.conf에 설정한대로 reverse proxy가 동작한다. 만일 아래와 같이 작성하면, /api로 시작하는 요청은 8000번 포트로, 그 외에는 3000번 포트로 보내게 된다. 즉, 현재 서버에 "/"로 시작하는 path로 접근하면 http://127.0.0.1:3000;으로 돌려준다. 그러므로 사용자는 3000포트로 접근하지 않았지만 3000포트로 접근한 것과 동일한 결과를 볼 수 있다.

location / {
    proxy_pass http://127.0.0.1:3000;
}

location /api {
    proxy_pass http://127.0.0.1:8080;
}

 

 

 

< 참고 >

https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html

https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/

https://icerabbit.tistory.com/116

 

 

 

< 추가 공부 >

https://www.expressvpn.com/kr/what-is-vpn/proxy-vs-vpn

https://engineer-mole.tistory.com/288

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

https://firework-ham.tistory.com/23

https://code-lab1.tistory.com/214