본문 바로가기

HTTP

[HTTP] 웹 호스팅

 

웹 호스팅은 콘텐츠 리소스를 저장, 중개, 관리하는 일을 한다. 콘텐츠를 저장해서 제공하고 관련 로그에 접근하거나 관리하는 데 서버가 필요하다.


#1. 가상 호스팅

  • 많은 웹 호스팅 업자는 컴퓨터 한 대를 여러 고객이 공유하게 해서 저렴한 웹 호스팅 서비스를 제공한다. 이를 공유 호스팅 혹은 가상 호스팅이라고 한다.
  • 각 웹사이트는 다른 서버에서 호스팅 하는 것처럼 보이지만 사실은 같은 서버에서 호스팅 되는 것이다.
  • 호스팅 업자는 복제 서버 더미(서버팜)을 만들고 서버팜에 부하를 분산할 수 있다.
  • 팜에 있는 각 서버는 다른 서버를 복제한 것이고 많은 가상 웹사이트를 호스팅하고 있기 때문에 관리자는 편해진다.

호스트 정보가 없는 가상 서버 요청

HTTP/1.0 명세는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트에 누가 접근하고 있는지 식별하는 기능을 제공하지 않는다. HTTP/1.0 요청은 요청 메시지에 URL의 경로 컴포넌트만 전송한다.

웹 서버는 사용자가 어떤 웹 사이트로 접근하려고 하는지 아는데 필요한 정보가 충분하지 않다. 두 요청(서로 다른 웹사이트에) 완전히 다른 문서를 요청을 하더라도 요청 자체는 똑같이 생겼다. 문제는 웹 사이트 호스트 정보가 요청에서 제거된다는 것이다.

HTTP/1.0 서버 요청은 호스트 명 정보를 포함하지 않는다.


가상 호스팅 동작하게 하기

호스트 정보를 HTTP 요청 명세에 넣지 않은 것은 각 웹 서버가 정확히 한 웹사이트만 호스팅 할 것이라고 잘못 예측한 HTTP 명세의 실수였다. HTTP 설계자들은 공유 서버인 가상 호스팅을 고려하지 않았다.

HTTP/1.1을 지원하는 서버는 HTTP 요청 메시지에 있는 전체 URL을 처리할 수 있어야 한다. 하지만 기존에 있던 모든 애플리케이션이 이 명세에 맞추어 업그레이드하기까지는 오랜 시간이 걸릴 것이다.

문제점 해결을 위한 기술

  • URL 경로를 통한 가상 호스팅

서버가 어떤 사이트를 요청하는 것인지 알 수 있게 URL에 특별한 경로 컴포넌트를 추가한다. URL 기반의 가상 호스팅은 좋지 않은 방법이라 거의 사용하지 않는다.


  • 포트번호를 통한 가상 호스팅

웹 서버에 각각 다른 포트번호를 할당한다. 하지만 사용자는 URL에 비표준 포트를 쓰지 않고서도 리소스를 찾길 원한다.


  • IP 주소를 통한 가상 호스팅

각 가상 웹사이트에 유일한 IP 주소를 한 개 이상 부여한다. 서버는 HTTP 커넥션의 목적지 IP 주소를 보고 클라이언트가 어떤 웹 사이트에 연결하려고 하는지 알 수 있다.

가상 IP 호스팅

가상 IP 호스팅은 잘 동작하지만 규모가 아주 큰 호스팅 업자에게는 IP 주소 부족 문제가 생길 수 있디.


  • Host 헤더를 통한 가상 호스팅

모든 요청에 호스트 명(그리고 포트)을 Host 확장 헤더에 기술해서 전달한다. HTTP/1.1. 명세에 따르려면 Host 헤더를 반드시 기술해야 한다. Host 헤더는 브라우저와 서버 대부분이 지원하지만 아직 몇몇 클라이언트와 서버는 지원하지 않는다.

Host 헤더를 통한 가상 호스트 식별


HTTP/1.1 Host 헤더

  • 문법과 사용방법

Host 헤더에는 원본 URL에 있는 요청 리소스에 대한 인터넷 호스트와 포트번호를 기술한다.


  •  Host 헤더의 누락

Host 헤더를 사용하려는 상황에서 Host 헤더가 존재하지 않는다면 서버는 사용자를 기본 웹페이지로 보내거나 브라우저를 업그레이드하라고 제안하는 에러 페이지를 반환할 수 있다.


  • Host 헤더 해석하기

호스트를 기준으로 리소스를 구분하는 모든 웹 서버는 HTTP/1.1을 통해 오는 리소스를 경정하려면 다음과 같은 규칙을 사용한다.

  1. HTTP 요청 메시지에 전체 URL이 명시되어 있으면 Host 헤더에 있는 값을 무시하고 URL을 사용
  2. URL에 호스트명이 명시되어 있지 않고 Host 헤더가 있으면 호스트 명과 포트를 Host 헤더에서 가져옴
  3. 1번과 2번에서 호스트를 결정할 수 없으면 클라이언트에 400 Bad Request 응답 반환

#2. 안정적인 웹 사이트 만들기

 

웹 사이트에 장애가 생기는 몇 가지 상황

  • 서버 다운
  • 트래픽 폭증 (갑작스러운 트래픽 폭증은 웹 서버에 과부하를 준다.)
  • 네트워크 장애나 손실

웹 사이트 장애를 예측하고 대응하는 몇 가지 방법

 

미러링 된 서버 팜

서버팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다. 서버팜의 서버에 있는 콘텐츠들은 한 곳에 문제가 생기면 다른 한 곳에서 대신 전달할 수 있게 미러링 할 수 있다.

미러링 된 서버 팜

미러링 된 서버는 계층의 관계에 있다. 한 서버는 콘텐츠의 원본 제작자같이 행동하며 이 서버를 '마스터 원 서버'라 부른다. 마스터 원 서버로부터 콘텐츠를 받은 미러링 된 서버는 '복제 원 서버'라고 한다.


콘텐츠 분산 네트워크

콘텐츠 분산 네트워크(CDN)는 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크이다. 네트워크의 노드는 서버, 대리 서버, 혹은 프락시 서버가 될 수 있다.


CDN의 대리 캐시

리버스 프락시라고도 불리는 대리 서버는 미러링 된 웹 서버처럼 콘텐츠에 대한 요청을 받는다. 대리 서버와 미러링 된 서버의 차이점은 대리 서버는 보통 수요에 따라서 동작한다. 대리 서버는 원 서버의 전체 콘텐츠를 복사하지 않고 클라이언트가 요청한 콘텐츠만 저장한다. 

대리 서버의 캐시에 콘텐츠가 분산되는 방식은 그들이 받는 요청에 따라 달라진다. 원 서버는 그들의 콘텐츠를 업데이트해 줄 의무는 없다. 많은 요청이 있는 콘텐츠를 빠르게 제공하려고 사용자가 요청하기도 전에 미리 콘텐츠를 가져오는 미리 가져오기 기능을 가진 대리 서버도 있다.


CDN의 프락시 캐시

대리 서버와는 다르게 전통적인 프락시 캐시는 어떤 웹 서버 요청이든지 다 받을 수 있다. 하지만 대리 서버를 사용하면 프락시 캐시의 콘텐츠는 요청이 있을 때만 저장될 것이고 원본 서버 콘텐츠를 정확히 복제한다는 보장이 없다. 어떤 프락시는 요청을 많이 받은 콘텐츠를 미리 로딩하기도 한다.

스위치가 클라이언트의 요청을 가로채어 프락시로 보낸다.

요청이 있을 때만 저장하는 프락시 캐시는 조금 다른 방식으로 동작하는데 스위치 혹은 라우터가 중간에서 웹 트래픽을 가로채 처리하기도 한다.


 

참고 자료

  • HTTP완벽가이드 , 인사이트