-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
18장 웹호스팅
알아보기
- 여러 웹사이트를 같은 서버에
가상 호스팅하는 방법. 그리고 그것이 HTTP에 끼치는 영향 - 트래픽이 많은 상황에서 안정적인 사이트를 구축하는 방법
18.1 호스팅 서비스
- 웹 초기에 자체 컴퓨터 하드웨어를 구매하고 자체 망을 구축하여 직접 웹 서버를 관리했다.
- 웹이 대세가 되면서 많은 사람들이 웹 서버를 원했지만, 서버실과 네트워크를 관리할 수 있는 사람은 많지 않았다.
- 그 때문에 전문적으로 호스팅 서비스를 제공하는 사업이 만들어졌다.
18.1.1 간단한 예 : 전용 호스팅
- ISP에서 서버를 구매하여 전용 웹 서버를 임대하는 것
18.2 가상 호스팅
- 보통 사람들에게 전용 웹 서버를 사용하는 것은 낭비다(비용적인 부분에서)
- 호스팅 업체들은 효율적으로 호스팅을 하기 위해
가상 호스팅을 사용했다. 가상 호스팅이란 서버 한 대에서 여러 사람들에게 동시에 호스팅하는 것이다. (실제로는 하나의 서버가 아니라서버팜이라 불리는 서버 그룹들이 수백개, 수천개의 웹사이트를 호스팅함)- VPS(Vitual Private Server)의 약자로 VPS 뜻은 물리적인 서버 컴퓨터를 가상으로 쪼갠 ‘가상 서버 컴퓨터’를 의미한다.
- 물리적인 웹호스팅 서버를 여러 단위로 공간을 나눠 파는 것이 VPS 서비스
18.2.1 호스트 정보가 없는 가상 서버 요청
HTTP/1.0에는 공용 웹 서버가 호스팅하고 있는 가상 웹 사이트에 누가 접근하고 있는지 식별하는 기능이 없다.- 단순히
GET/index.html이라 요청을 해서, 호스팅된 여러 웹 중 어떤 것을 원하는지 명확히 알 수 없다.
18.2.2 가상 호스팅 동작하게 하기
호스트 정보를 HTTP 요청 명세에 넣지 않은 것은, 각 웹 서버가 정확히 한 웹 사이트만 호스팅할 것이라고 잘못 예측한 HTTP 명세의 실수였다(가상 호스팅을 고려하지 않은 것).- 이를 해결하기 위한 4가지 방법이 나왔는데
URL 경로를 통한 가상 호스팅
- URL 사이에 특별한 경로 컴포넌트를 넣는 것
http://www.joes-hardware.com/joe/index.html , "joe" 를 넣어서 인식
http://www.mary-antiques.com/mary/index.html , "mary" 를 넣어서 인식
- 서버에 요청이 도착하면
"GET/joe/index.html"
"GET/mary/index.html" 이렇게 인식 가능
- 그러나 불필요한 접두어를 사용하기 때문에 혼란스러워서 사용 안 함.
포트번호를 통한 가상 호스팅
- 각각 다른 포트번호를 할당하는 방법
- 사용자는 URL에 비표준 포트(사용자 지정 포트)를 쓰지 않고 리소스를 찾기 원하기 때문에 사용 안 함.
IP 주소를 통한 가상 호스팅
- 가상 웹 사이트마다 유일한 IP 주소를 할당하는 방법.
- 모든 가상 서버의 IP 주소는 같은 공용 서버에 연결되어 있다.
- 서버는 HTTP 커넥션의 목적지 IP 주소를 통해 클라이언트가 어떤 웹 사이트에 접근했는지 명확히 알 수 있다.
- 그러나 연결할 수 있는 IP 개수 제한이 있다.
- 수천개의 IP 주소를 관리하는데 비용이 크다.
Host 헤더를 통한 가상 호스팅
- 브라우저 대부분이 URL의 경로 컴포넌트만 서버에 전달하므로, 중요한 가상
호스트 명정보는 받지 못한다. - 그래서 모든 요청에 호스트 명을 Host 확장 헤더에 기술해서 전달하도록 했다.
- Host 헤더는 HTTP/1.0+에서 처음 소개가 되었고 HTTP/1.1 명세에 추가되었다.
18.2.3 HTTP/1.1 Host 헤더
- Host 헤더에 포트가 기술되어 있지 않으면, 해당 스킴의 기본 포트를 사용한다.
- URL에 IP 주소가 있으면, Host 헤더는 같은 주소를 포함해야 한다.
- URL에 호스트 명이 기술되어 있으면, Host 헤더는 같은 호스트 명을 포함해야 한다.
- URL에 호스트 명이 기술되어 있으면, Host 헤더는 URL의 호스트명이 가리키는 IP 주소를 포함해서는 안 된다.
- 클라이언트가 특정 프락시 서버를 사용한다면, Host 헤더에 프락시 서버가 아닌 원 서버의 호스트명과 포트를 기술해야 한다.
- 웹 클라이언트는 모든 요청 메시지에 Host 헤더를 기술해야 한다. HTTP 요청이 Host 헤더를 포함하지 않으면 에러를 응답이 반환된다.
Host 헤더 해석하기
- 가상 호스팅을 사용하지 않거나 지원하지 않는 서버에서는 리소스가 달라지기 때문에 Host 헤더 값을 무시할 것이다.
- 만약 Host 헤더에 값이 있다면, 다음의 절차대로 값을 얻어낸다.
- HTTP 요청 메시지에 전체 URL이 기술되어 있다면, Host 헤더에 값을 무시하고 전체 URL을 사용한다.
- HTTP 요청 메시지에 있는 URL에 호스트명이 기술되어 있지 않다면 Host 헤더에서 가져온다.
- 호스트명을 가져올 수 없다면
400 Bad Request에러를 발생.
18.3 안정적인 웹 사이트 만들기
- 서버 다운
- 트래픽 폭증
- 네트워크 장애, 손실
18.3.1 미러링 된 서버 팜
- 서버 팜은 서로 대신할 수 있고 식별할 수 있게 설정된 웹 서버들의 집합이다.
- 미러링 된 서버는 원본 콘텐츠를 갖는 마스터 원 서버와 복제 원서버로 구성된다.
- 네트워크 스위치를 통해 분산 요청을 보내게 된다.
- 부하의 분산은 HTTP 리다이렉션방식과 DNS 리다이렉션 방식이 있다.
Is AWS a server farm?
AWS services are delivered to customers via a network of AWS server farms located throughout the world.
Where are Amazon server farms?
Amazon Web Services (AWS) operates data centers in the following regions: US East (Ohio), US West (Oregon), US West (Northern California), and US East (Northern Virginia)
HTTP 리다이렉션
- 콘텐츠에 대한 URL은 마스터 서버의 IP를 가리키고, 마스터 서버는 요청을 받은 즉시 복제 서버로 리다이렉트 한다.
DNS 리다이렉션
- 콘텐츠의 URL은 네 개의 IP 주소를 가리킬 수 있고, DNS 서버는 클라이언트에게 전송할 IP 주소를 선택할 수 있다.
18.3.2 콘텐츠 분산 네트워크
- 콘텐츠 분산 네트워크(CDN)는 특정 콘텐츠의 분산을 목적으로 하는 단순한 네트워크이다.
- 네트워크 노드는 서버, 대리 서버, 혹은 프락시 서버가 될 수 있다.
CDN vs Load Balancers : https://as-you-say.tistory.com/110
18.3.3 CDN의 대리 캐시
- 대리 캐시는 복제 원 서버를 대신해 사용될 수 있다.
- 대리 캐시는 리버스 프락시라고도 불리는데, 미러링 된 웹 서버처럼 콘텐츠에 대한 요청을 받아 처리한다.
- 특정 대리 캐시는 특정 원 서버와 연결이 되어 원 서버에 요청을 일부 처리하게 된다.
- 미러링 된 원 서버와 대리 서버의 차이점은 미러링 된 원 서버처럼 콘텐츠의 전체를 복제하지 않고, 캐싱된 일부분을 가지고 있다는 점이다.
- 일부 대리 캐시 서버는 요청하지도 않은 콘텐츠를 미리 가져오는 기능을 제공하기도 한다.
18.3.4 CDN의 프락시 캐시
- 프락시 캐시는 대리 캐시와 다르게 별도의 연동이나 IP 주소 합의등이 필요없다. 따라서 어떤 웹 서버 요청이든 다 받을 수 있다.
- 대리 서버를 사용하면 프락시 캐시는 요청이 있을 때만 저장되기 때문에, 원 서버의 최신의 콘텐츠를 가지고 있다는 확신이 없다.
- 요청이 있을 때만 저장하는 프락시 서버는 레이어2 혹은 레이어3 장비 중간에서 웹 트래픽을 가로채 처리하기도 한다.



