서버에는 하나의 웹사이트만 보관되나요?

서버에는 하나의 웹사이트만 보관되나요?

DNS가 웹사이트가 저장된 서버의 IP 주소와 도메인 이름을 연결한다는 것을 제가 이해한 바에 따르면, 이는 각 서버가 하나의 웹사이트만 보유할 수 있다는 의미입니까? 그렇지 않은 경우 동일한 서버에 여러 웹사이트가 있는 경우 서버의 IP 주소를 호출하여 내가 원하는 웹사이트를 어떻게 알 수 있습니까?

답변1

기본적으로 브라우저는 HTTP 요청에 도메인 이름을 포함하므로 웹 서버는 어떤 도메인이 요청되었는지 알고 이에 따라 응답할 수 있습니다.


HTTP 요청

일반적인 HTTP 요청이 발생하는 방식은 다음과 같습니다.

  1. 사용자는 형식으로 URL을 제공합니다 http://host:port/path.

  2. 브라우저는 URL의 호스트(도메인) 부분을 추출하고 필요한 경우 다음과 같은 프로세스를 통해 이를 IP 주소로 변환합니다.이름 확인. 이 변환은 DNS를 통해 이루어질 수 있지만 반드시 그럴 필요는 없습니다. 예를 들어 hosts일반 OS의 로컬 파일은 DNS를 우회합니다.

  3. 브라우저는 해당 IP 주소의 지정된 포트 또는 기본 포트 80에 대한 TCP 연결을 엽니다.

  4. 브라우저가 HTTP 요청을 보냅니다. HTTP/1.1의 경우 다음과 같습니다.

    GET /path HTTP/1.1
    Host: example.com
    

    ( Host헤더는 표준이며 HTTP/1.1에서 필수입니다. HTTP/1.0 사양에서는 지정되지 않았지만 일부 서버에서는 이를 지원합니다.)

여기에서 웹 서버에는 응답이 무엇인지 결정하는 데 사용할 수 있는 여러 정보가 있습니다. 단일 웹 서버가 여러 IP 주소에 바인딩될 수 있다는 점에 유의하세요.

  • TCP 소켓에서 요청된 IP 주소
    • 클라이언트의 IP 주소도 사용 가능하지만 거의 사용되지 않습니다. 때로는 차단/필터링에 사용되기도 합니다.
  • TCP 소켓에서 요청된 포트
  • HostHTTP 요청의 브라우저가 헤더 에 지정한 요청된 호스트 이름입니다 .
  • 요청된 경로
  • 기타 헤더(쿠키 등)

아시다시피 요즘 가장 일반적인 공유 호스팅 설정은 여러 웹사이트를 단일 IP 주소:포트 조합에 배치하여 Host웹사이트를 구별하기 위한 것입니다.

이것은 다음과 같이 알려져 있습니다.이름 기반 가상 호스트Apache-land에서는 Nginx가 호출하는 동안서버 블록의 서버 이름IIS는 선호합니다가상 서버.


HTTPS는 어떻습니까?

HTTPS는 조금 다릅니다. TCP 연결 설정까지 모든 것이 동일하지만 그 이후에는 암호화된 TLS 터널을 설정해야 합니다. 목표는 요청에 대한 정보를 유출하지 않는 것입니다.

서버가 실제로 이 도메인을 소유하고 있는지 확인하려면 서버는 신뢰할 수 있는 제3자가 서명한 인증서를 보내야 합니다. 그러면 브라우저는 이 인증서를 요청한 도메인과 비교합니다.

이는 문제를 야기합니다. HTTP 요청이 수신되기 전에 서버가 어떤 호스트(웹사이트)의 인증서를 보내야 하는지 서버가 어떻게 알 수 있나요?

전통적으로 이 문제는 HTTPS가 필요한 모든 웹사이트에 전용 IP 주소(또는 포트)를 가짐으로써 해결되었습니다. 분명히 IPv4 주소가 부족해지기 시작하면 문제가 됩니다.

입력하다SNI(서버 이름 표시). 이제 브라우저는 TLS 협상 중에 호스트 이름을 전달하므로 서버는 올바른 인증서를 보낼 수 있을 만큼 일찍 이 정보를 갖게 됩니다. 서버 측 구성은 HTTP 가상 호스트 구성 방법과 매우 유사합니다.

단점은 이제 호스트 이름이 암호화 전에 일반 텍스트로 전달되며 본질적으로 정보가 유출된다는 것입니다. 어쨌든 호스트 이름이 일반적으로 DNS 쿼리에 노출된다는 점을 고려하면 이는 일반적으로 허용 가능한 절충안으로 간주됩니다.


IP 주소로만 사이트를 요청하면 어떻게 되나요?

사용자가 요청한 특정 호스트를 알 수 없을 때 서버가 수행하는 작업은 서버 구현 및 구성에 따라 다릅니다. 일반적으로 호스트를 명시적으로 지정하지 않은 모든 요청에 ​​대한 응답을 제공하는 "기본", "포괄" 또는 "대체" 사이트가 지정되어 있습니다.

이 기본 사이트는 자체 독립 사이트(종종 오류 메시지 표시)일 수도 있고 서버 관리자의 기본 설정에 따라 서버의 다른 사이트일 수도 있습니다.

답변2

기술이 없는 사람들을 위해 이 설명을 준비했습니다.

Jack, Jill, Joe는 기숙사에 살고 있으며 휴대폰이 없습니다.

전화번호부에는 모두 같은 번호로 기재되어 있습니다. (A-레코드)

전화를 걸면 누군가 전화를 받습니다. "Jill과 통화하고 싶습니다"라고 말하면 그녀에게 전화를 걸 수 있습니다.

전화번호부의 A 레코드(A 전화번호/IP 주소) 대신 "Dormitory X"라고만 표시될 수 있으며 Dormitory X의 번호를 더 자세히 찾아야 합니다. 이는 CNAME 레코드입니다.

Jill이 자리에 없을 경우, 귀하는 다음과 같은 혜택을 받을 수 있습니다.

  • 404 질은 여기 없어
  • 410 질이 죽었습니다.
  • 301 질은 피터와 함께 이사하게 된다
  • 302 Jill이 Peter를 방문 중입니다. 대신 그에게 전화하세요.

  • 400 나는 당신을 이해할 수 없습니다.

  • 401 당신은 누구입니까? 비밀번호가 무엇입니까? 또는 오후 10시 이후에는 남성 전화를 허용하지 않습니다.
  • 402 결제 필요(Jill이 실명인가요 ;-) )
  • 403 아니요, 올바른 비밀번호가 아닙니다.
  • 418 질은 찻주전자입니다 :-)
  • 429 질은 더 이상 전화를 받을 수 없습니다.
  • 451 귀하는 금지 명령을 위반하고 있습니다.

  • 500 우리 전화 시스템이 고장났어요.

답변3

DNS가 웹사이트가 저장된 서버의 IP 주소와 도메인 이름을 연결한다는 것을 제가 이해한 바에 따르면, 이는 각 서버가 하나의 웹사이트만 보유할 수 있다는 의미입니까?

먼저 여기에는 여러 가지 고유한 개념이 있다는 점을 이해해야 합니다.

  • 웹 사이트, 일관된 전체를 구성하는 웹 페이지 그룹입니다.
  • IP 주소, 인터넷 프로토콜에서 트래픽의 소스 또는 대상으로 사용되는 숫자 주소(IPv4의 경우 32비트, IPv6의 경우 128비트)입니다.
  • 서버, 클라이언트의 요청을 처리하는 작업을 수행하는 기계입니다.
  • 호스트 이름, DNS에서 시스템을 식별하는 데 사용되는 이름(예: "www.example.com" 또는 "en.wikipedia.org")

이들 사이에는 일대일 관계가 없습니다. 하나의 서버는 여러 IP 주소를 가질 수 있습니다. 여러 호스트 이름이 하나의 IP 주소를 가리킬 수 있습니다. 하나의 호스트 이름이 여러 IP 주소를 가리킬 수 있습니다. 여러 웹사이트가 동일한 호스트 이름 아래에 있을 수 있습니다. 하나의 웹사이트가 여러 호스트 이름에 분산될 수 있습니다.

그렇지 않은 경우 동일한 서버에 여러 웹사이트가 있는 경우 서버의 IP 주소를 호출하여 내가 원하는 웹사이트를 어떻게 알 수 있습니까?

예전(HTTP 1.0 이전)에는 서버가 다르게 처리하려는 각 호스트 이름이 고유한 IP 주소를 가져야 했습니다. 이것은 오히려 낭비였습니다.

HTTP 1.1은 Host"헤더를 HTTP 요청의 필수 필드로 추가했습니다(IIRC 일부 공급업체는 이전에 이를 확장으로 지원했습니다). 이는 서버에 요청된 호스트 이름을 알려주므로 동일한 호스트 이름에 대해 서로 다른 콘텐츠를 제공할 수 있습니다. IP 주소. 이제 클라이언트에서 HTTP 1.1이 지원됩니다.

불행하게도 SSL(나중에 TLS)이 문제를 추가했습니다. SSL/TLS 세션을 설정하려면 서버가 요청된 호스트 이름을 포함하는 인증서를 클라이언트에 제시해야 하지만 SSL/TLS 세션이 설정될 때까지 HTTP 요청이 도착하지 않습니다.

필드를 사용하거나 SubjectAltName필드에서 와일드카드를 사용하여 하나의 인증서가 여러 호스트 이름을 포함하도록 할 수 있습니다 CommonName. 그러나 이는 특히 관련된 호스트 이름이 다른 소유권을 가진 도메인에 속해 있는 경우 관리상의 문제를 야기합니다.

그래서 TLS는 "서버 이름 표시"(SNI) 확장을 도입했습니다. 이 확장을 사용하면 클라이언트는 TLS 핸드셰이크 절차 중에 요청된 호스트 이름을 서버에 보냅니다. 그러면 서버는 적절한 인증서를 제시할 수 있습니다. 불행하게도 모든 주요 SSL/TLS 구현의 현재 버전은 SNI를 지원하지만 이전 버전이 더 이상 사용되지 않는 데는 오랜 시간이 걸렸습니다.

답변4

DNS를 사용하면 개별 IP 주소에 원하는 만큼 많은 이름을 할당할 수 있습니다.호스트 파일예를 들어 각 이름을 공백으로 구분하면 됩니다. DNS 서버를 사용하여 다음을 수행할 수도 있습니다.단일 이름에 여러 IP 주소 할당. 이는 일대일 관계에만 국한되지 않습니다.

웹 서버는 어떤 사이트에서 서비스를 제공할지 알고 있습니다.검사요청한 URL. 어떤 도메인이 요청되었는지, 어떤 포트가 요청되었는지, 어떤 프로토콜이 사용되었는지 살펴봅니다. 이는 DNS와 관련이 없으며 HTTP 프로토콜에 의해 처리됩니다.

관련 정보