리버스 프록시 와 로드 밸런싱

2023. 1. 6. 17:51카테고리 없음

리버스 프록시?

클라이언트 요청을 대신 받아 내부서버로 전달 해주는 것을 리버스 프록시 라고 한다.

"프록시" 대리라는 의미로 , 정보를 대신 전달해주는 주체라고 생각하면 된다.

 

프록시 없이 웹서버를 운영시 

- 사용자가 갑자기 많아지거나 , 웹서버가 그대로 노출되어 있기 때문에 보안적인 부분에 위험성이 크다.

-nginx를 사용하면 로드 밸런싱 ( 클라이언트이 요청을  서버에 나누어 주는 역할 ) 로 부하를 줄여 줄수있다.

또한 웹서버의 SSL( 보안) 인증도 적용 할 수 있다.

 

 

 사용자 -> NGINX ->웹서버로 구성해서 사용자의 요청을 NGINX가 대신 웹서버로 전달 해주도록 구성한다.

프록시?

서버와 클라이언트 간의 중계 서버로서 통신을 대신 수행하는 역할을 한다.

 

1.필터 EX) 부적적한 콘텐츠  성인물 등  (Forward proxy)

2.접근제어프록시 ex)특정 클라이언트만 접속 할수 있게 하는 방법 

3.캐싱 ( 서버 앞 단에서 인기있는 요청을 관리 , 해당 요청을 응답 , 서버까지 가지 않고 해결)

4.익명화 ( 클라이언트 인척 요청, 리버스 프록시는 서버인척 클라이언트 응답 )보안에 띄어남

 

 

리버스 프록시의 장점

  • 로드 밸런싱 : Nginx는 클라이언트의 요청을 프록시 서버에 분산하기 위해 로드 밸런싱을 수행하여 성능, 확장성 및 신뢰성을 향상시킬 수 있습니다.
  • 캐싱 : Nginx를 역방향 프록시로 사용하면 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수 있습니다. 이 기능은 프록시 서버의 응답에서 수신한 콘텐츠를 캐싱하고 이 콘텐츠를 사용하여 매번 동일한 콘텐츠를 프록시 서버에 연결할 필요 없이 클라이언트에 응답하는 방식으로 작동합니다.
  • SSL 터미네이션 : Nginx는 클라이언트와의 연결에 대한 SSL 끝점 역할을 할 수 있습니다. 수신 SSL 연결을 처리 및 해독하고 프록시 서버의 응답을 암호화합니다.
  • 압축 : 프록시 서버가 압축된 응답을 보내지 않는 경우 클라이언트로 보내기 전에 응답을 압축하도록 Nginx를 구성할 수 있습니다.
  • DDoS 공격 완화 : 수신 요청과 단일 IP 주소당 연결 수를 일반 사용자에게 일반적인 값으로 제한할 수 있습니다. 또한 Nginx를 사용하면 클라이언트 위치와 "User-에이전트" 및 "Referer"와 같은 요청 헤더 값을 기준으로 액세스를 차단하거나 제한할 수 있습니다.

로드밸런서 ?

로드 밸런서로는 L4스위치가 있고 L7스위치가 있는데 

 외부로부터의 요청을 서버가 직접 받는 것이 아닌 "부하"분산 Network switch 혹은 '소프트웨어가 받은후

이를 서버에 적절히 나눠준다.

tcp,udp,http와 같은 protocal들의 header를 분석하고 그정보를 바탕으로 부하 분산을 실시하고 거기에 더해 

프라이빗 ip를 공유ip로 혹은 그 반대로  변경에 보낼수 있다.

 

L4스위치

- OSI 7 Layer중 Layer4의 정보인 port를 사용하기 때문이다.

하나의 서버에서 웹서비스를 제공하더라도 80,8080,8888,port 같이 다양한 웹서비스를 제공할수있다.

영기서 port를 모른다면 어디로 접속해야 할지 모르다 보니 ip뿐아니라, port를 명시해주어야 한다.

 

*Virtual Server: 외부 사용자들이 접속시 사용하는 공유ip(123.111.43.1)와 port(80)을 갖고있는 것을 부르는 말

L4스위치는 다수의 Virtual Server를 가질수있다.특정 virtual server에 전달되 요청들은  연결된pool에 전달된다.

 

*Pool Member:  pool의 소속원으로 ip와 port로 구성되는 서버 

 

 

 

L7스위치?

 

L4처럼 단순히 Layer4를 이용하여 로드 밸런싱하는 것 뿐아니라  실제 사용자가 직접 접근하느 프로토콜인

Layer7까지 제어하며 로드 밸런싱을 실시할수있다.

또한 선택적으로 사용자와 서버가 사용하고자 하는 프로토콜인 (HTTP, DNS,SMTP,FTP)등에 관여 할수 있다.

프로토콜 헤더에 필요한 정보를 삽입하거나 제어할 수 있다.

 

 

L4 Virtual Serverd의 트래픽 플로우 

L4스위치는 트래픽 중개 및 제어보다는 전달 에 초점이 맞춰져 있다 , 그렇기에 TCP/UDP를 제어하면서 

사용자가 전달한 요청을 그대로 Pool Member(실제서버)에게 전달한다.L4스위치가 로드 밸런싱과 

연결 생성에  집중하기에 부하가 상대적으로 덜하고 성능을 극대화 할수 있다.

 

L7 Virtual Serverd의 트래픽 플로우 

Layer 4의 TCP/UDP뿐만 아니라 Layer 7의 프로토콜인 (HTTP, DNS,SMTP,FTP)등에 관여 할수 있다.

프로토콜 헤더에 필요한 정보를 삽입하거나 제어할 수 있기 때문에 L4스위치가 프로토콜의 헤더에 직접 개인해서

서버와 L4스위치가 3-Way-handshake를 실시하고 패킷도 직접 받아서 처리후 넘겨준다.

전달자 보다는 중개자  "proxy"역할이 크다.

사용자와 L4스위치가 3-Way-handshake를 실시한후 , HTTP요청을 받아들인다. 그리고 부하분산할 POOL Member(실제서버)를 선택한 뒤, L4스위치와 서버가 3-Way-handshake를 실시하여 전달받은 요청을 pool member(실제 서버)에 전달하는 것을 볼수 있다. 그럼HTTP헤더를 어떻게 제어해서 쓴다는 말인가>???

 

이것은 

예를들어  사용자가 인터넷 브라우저 에 따라 제공되는 웹페이지를 다르게 하고 싶다고 했을때

HTTP헤더에 있는 User-agent Header를 보고 브라우저 종류를 확인한후, 각각 다른 URL로 Forwarding을 시키면된다.

 

virtual server Type인 Standard Type을 사용하게 되면 HTTP헤더를 제어 할수 있게 되므로 위의 사례처럼 다양한 로드밸런싱 혹은 전달이 가능하게 된다 . 

 

로드 밸런서와 리버스 프록시?

: 클라이언트이 요청을 분산하여 서버에 나누어 주는 역할 , 분배하는 기준이 있다 , 그럼으로 서버의 부하를 막아준다.

로드밸런싱 장치와 프록시는 서로 혼용되어 사용이 가능한 용어다, 모든 프록시가 로드밸런서는 아니지만 대다수의 프록시는 기본적으로 로드 밸런싱이 가능하다.

 

 

 

참고:서버 부하 분산 쉽게 이해하기 (tistory.com)