HTTP와 연계하는 웹 서버

오호·2021년 4월 28일
1

네트워크

목록 보기
7/13
post-custom-banner

1. 가상호스트(Virtual Host)

HTTP/1.1에서는 하나의 HTTP 서버에 여러 개의 웹 사이트를 실행할 수 있습니다. 이를 위해 사용되는 것이 가상호스트입니다.

한마디로, 가상호스트 설정으로 하나의 웹서버로 여러개의 웹사이트를 운영할 수 있게 해줄 수 있습니다.

호스트명과 도메인 명을 완전하게 포함한 URI를 지정하거나 Host 헤더 필드에서 지정해야 합니다.

1.1 액세스 접근

인터넷에서 도메인명은 DNS에 의해서 IP주소로 변환되고 나서 액세스하게 되는데, 리퀘스트가 서버에 도착한 시점에는 IP 주소를 기준으로 액세스하게 됩니다.

이 때 1대의 서버에 두 개의 다른 도메인이 있을 경우, 어디에 대한 액세스인지 알 수 없기 때문에 HTTP 리퀘스트를 보내는 경우엔 다음과 같은 방법을 사용합니다.

1.1.1 호스트명과 도메인 명을 완전하게 포함한 URI 지정

1.1.2 Host 헤더 필드에서 지정

1.2 실제 리퀘스트 예시

GET /pub/WWW/TheProject.html HTTP/1.1
		Host : www.w3.org

2. 프록시(Proxy)

아래 그림처럼 서버와 클라이언트 사이에서 중계기로서 대리로 통신을 수행하는 서버를 가리켜 프록시 서버라고 합니다.

간단히 말하자면, 클라이언트로부터 받은 리퀘스트를 서버에 전송하고, 서버로부터의 리스폰스를 클라이언트에 전송합니다.

Proxy

프록시 서버를 경유해서 리퀘스트와 리스폰스를 릴레이할 때마다 "Via"헤더 필드에 정보를 추가합니다.

2.1 사용 목적

  • 보안 : 익명의 사용자가 서버에 접근하는 것을 막아줍니다.
  • 속도 : 프록시 서버는 사용자의 요청을 cache해서 동일 요청이 들어오면 cache 자원을 반환합니다.
  • 지역 네트워크의 제한 우회 : 보안 상의 이유로 80포트 외에 포트를 막아 놓은 경우가 있는데 이러한 제한을 우회하여 원하는 다른 서비스를 이용할 수 있습니다.

2.2 사용 방법

캐시를 하는지의 여부와 메시지를 변경하는지의 여부에 따라 두가지로 분류한다.

2.2.1 캐싱 프록시

프록시로 리스폰스를 중계할 때, 프록시 서버상에 리소스 캐시를 보존해 두는 타입의 프록시입니다. 프록시에 다시 같은 리로스에 리퀘스트가 온 경우, 오리진 서버로부터 리소스를 획득하는 것이 아니라 캐시를 리스폰스로서 되돌려 줍니다.

2.2.2 투명 프록시

프록시로 리퀘스트와 리스폰스를 중계할 때, 메시지 변경을 하지 않는 타입의 프록시입니다.

2.3 Forward 프록시

프록시 서버는 위치에 따라서 크게 두가지로 나눌 수 있는데 첫 번째로 살펴볼 것은 Forward 프록시입니다.

일반적으로 흔히 말하는 프록시는 이 Forward 프록시를 의미합니다.

일반적인 프록시❓
ex)
1. 프록시 서버 설정을 한다
2. 인터넷 속도 향상을 위해 프록시를 설정한다
3. 외국에서 접속하는 것처럼 테스트하기 위해 프록시 설정을 한다
4. 개인정보를 빼돌린 해커 A씨는 IP추적을 방지하기 위해 프록시 설정을 한다..
등 이런 예시들이 흔히 말하는 프록시라고 알고 넘어가도록 하겠습니다 🚀

Forward Proxy
이미지 출처

프록시 서버를 '클라이언트 호스트들과 인터넷 사이'에 위치시키는 것을 Forward 프록시라고 부른다.

2.3.1 Forward Proxy의 캐싱

클라이언트의 이전 요청을 저장해두었다가 동일한 요청이 도달했을 때 Forward Proxy는 오리진서버(본 리소스가 저장된 서버)에 요청을 전달하지 않고 바로 응답을 돌려주는 것을 의미합니다.

이런 방식은..
1) 전송 시간을 절약해줍니다.
2) 또한 불필요한 외부 전송이 발생하지 않으며
3) 외부 요청이 감소함에 따라 네트워크 병목 현상을 방지할 수 있습니다.

2.3.1 Forward Proxy의 익명성

'클라이언트가 보낸 요청을 감춘다' 라는 의미를 가지고 있습니다.

프록시를 사용하지 않는 통신에서는 일반적으로 클라이언트가 서버에 직접적으로 요청을 합니다. 즉, 서버는 클라이언트의 정보(IP 등)들을 알 수 있습니다.

그러나, Forward Proxy를 사용하면 마치 프록시가 전송하는 것처럼 인식하기 때문에 서버는 누가 요청을 보냈는지 알 수 없습니다.
서버가 받은 요청 IP = Proxy의 IP 라는 공식이 성립됩니다.

2.4 Reverse 프록시

reverse proxy

프록시 서버를 '인터넷과 서버 사이에 위치시키는 방식' 을 Reverse 프록시라고 부른다.

즉, 사용자가 naver.com 웹 서비스에 데이터를 요청하면, Reverse 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후에 이 데이터를 사용자에게 전달하는 방식이다.

2.4.1 Reverse Proxy의 캐싱

Forward Proxy와 같은 방식으로 동작하기 때문에 설명은 추가적으로 하지 않겠습니다.

2.4.2 보안

서버 정보를 클라이언트로부터 숨김.

클라이언트입장에서 오리진 서버에 대해서 알지 못하고 Reverse Proxy를 통해서 요청을 하게 됩니다. 즉 클라이언트는 Reverse Proxy를 실제 서버라고 생각하여 요청을 합니다.
실제 서버의 IP가 노출되지 않습니다.

2.4.3 Load Balancing

Load Balancing은 해야할 작업을 나누어 서버의 부하를 분산 시키는 것

간단히 말하면 Load Balancer는 클라이언트로부터 받은 요청을 서버들에게 적절하게 분산시켜줍니다.

3. 게이트웨이

게이트웨이는 프록시와 유사하게 한 네트워크에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점입니다.

서로 다른 네트워크를 연결해줍니다. 서로 다른 네트워크의 프로토콜이 다를 경우에 중재 역할을 해준다고 볼 수 있습니다.

4. 터널

터널은 요구에 따라서 다른 서버와의 통신 경로를 확립합니다.

이 때 클라이언트는 SSL 같은 암호화 통신을 통해 서버와 안전하게 통신을 하기 위해 사용합니다. 터널 자체는 HTTP 리퀘스트를 해석하지 않고 그대로 다음 서버에 중계하고 터널은 통신하고 있는 양쪽 끝의 접속이 끊어질 때 종료된다.

참고 블로그 1
참고 블로그 2

profile
오호
post-custom-banner

0개의 댓글