웹 서버는 하나의 웹 사이트 만 보유하고 있습니까?
도메인 이름, IP 주소, 웹 서버 및 웹 사이트가 모두 잘 어울리 며 함께 작동하는 방법을 처음 배우기 시작하면 때때로 약간 혼란 스럽거나 압도적입니다. 어떻게 그렇게 원활하게 작동하도록 설정되어 있습니까? 오늘의 수퍼 유저 Q & A 게시물에는 호기심 많은 독자의 질문에 대한 답변이 있습니다..
오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..
사진 제공 : Rosmarie Voegtli (Flickr).
질문
수퍼 유저 리더 user3407319는 웹 서버가 각각 하나의 웹 사이트 만 보유하고 있는지 알고 싶어합니다.
DNS에 대해 이해하고 도메인 이름을 웹 서버의 IP 주소와 연결하여 웹 사이트를 저장하면 각 웹 서버는 하나의 웹 사이트 만 보유 할 수 있습니까? 웹 서버가 하나 이상의 웹 사이트를 보유하고 있다면 어떻게하면 문제가 발생하지 않고 원하는 웹 사이트에 액세스 할 수 있는지, 어떻게 해결 될까요??
웹 서버는 각각 하나의 웹 사이트 만 보유합니까, 아니면 더 많은 웹 서버를 보유합니까??
대답
수퍼 유저 기고가 밥 (Bob)이 우리에게 해답을드립니다.
기본적으로 브라우저는 HTTP 요청에 도메인 이름을 포함하므로 웹 서버는 요청 된 도메인을 알고 이에 따라 응답 할 수 있습니다..
HTTP 요청
일반적인 HTTP 요청은 다음과 같습니다.
1. 사용자는 http : // host : port / path 형식의 URL을 제공합니다..
2. 브라우저는 URL의 호스트 (도메인) 부분을 추출하고 이름 확인이라고하는 프로세스에서 IP 주소 (필요한 경우)로 변환합니다. 이 변환은 DNS를 통해 가능하지만 반드시 할 필요는 없습니다 (예를 들어 일반적인 운영 체제의 로컬 호스트 파일은 DNS를 우회합니다).
삼. 브라우저가 지정된 포트에 대한 TCP 연결을 열거 나 해당 IP 주소의 포트 80을 기본값으로 사용합니다.
4. 브라우저가 HTTP 요청을 보냅니다. HTTP / 1.1의 경우 다음과 같습니다.
호스트 헤더는 표준이며 HTTP / 1.1에 필요합니다. 그것은 HTTP / 1.0 스펙에 명시되지 않았지만, 일부 서버는 어쨌든 그것을 지원합니다.
여기에서 웹 서버에는 응답을 결정하는 데 사용할 수있는 몇 가지 정보가 있습니다. 단일 웹 서버가 여러 IP 주소에 바인딩 될 수 있습니다..
- TCP 소켓에서 요청 된 IP 주소 (클라이언트의 IP 주소도 사용할 수 있지만이 방법은 거의 사용되지 않으며 때로는 차단 / 필터링 용으로 사용됨)
- 요청 된 포트, TCP 소켓으로부터
- 브라우저가 HTTP 요청에서 호스트 헤더에 지정한대로 요청 된 호스트 이름
- 요청 된 경로
- 기타 다른 헤더 (쿠키 등)
지금까지 가장 일반적인 공유 호스팅 설정은 요즘 웹 사이트를 구분할 수있는 호스트 만 남겨두고 단일 IP 주소 (포트 조합)에 여러 웹 사이트를 넣는 것으로 나타났습니다..
이것은 Apache-land의 이름 기반 가상 호스트로 알려져 있으며 Nginx는 서버 블록에서 서버 이름을 호출하고 IIS는 가상 서버를 선호합니다.
HTTPS 정보?
HTTPS는 약간 다릅니다. TCP 연결 설정까지는 모두 동일하지만 암호화 된 TLS 터널을 설정해야합니다. 목표는 요청에 대한 정보가 누출되지 않도록하는 것입니다..
웹 서버가 실제로이 도메인을 소유하고 있는지 확인하기 위해 웹 서버는 신뢰할 수있는 제 3자가 서명 한 인증서를 보내야합니다. 그러면 브라우저는이 인증서를 요청한 도메인과 비교합니다..
이것은 문제를 일으킨다. 웹 서버는 HTTP 요청을 받기 전에 어떤 호스트 / 웹 사이트의 인증서를 전송해야 하는지를 어떻게 알 수 있습니까??
전통적으로 이것은 HTTPS가 필요한 모든 웹 사이트에 전용 IP 주소 (또는 포트)가있어 해결되었습니다. 분명히 이것은 IPv4 주소가 부족할 때 문제가됩니다..
SNI (Server Name Indication)를 입력하십시오. 브라우저는 이제 TLS 협상 중에 호스트 이름을 전달하므로 웹 서버는이 정보를 일찌감치 알맞은 인증서를 보낼 수 있습니다. 웹 서버 측에서는 HTTP 가상 호스트 구성 방법과 매우 유사합니다.
단점은 호스트 이름이 이제 암호화되기 전에 일반 텍스트로 전달되고 본질적으로 유출 된 정보라는 것입니다. 호스트 이름이 일반적으로 DNS 쿼리에 표시되는 것을 고려하면 일반적으로 허용되는 트레이드 오프로 간주됩니다.
IP 주소로 웹 사이트를 요청하면 어떻게됩니까??
웹 서버가 요청한 특정 호스트를 알지 못할 때 웹 서버가 수행하는 작업은 웹 서버의 구현 및 구성에 따라 다릅니다. 일반적으로 호스트를 명시 적으로 지정하지 않은 모든 요청에 대한 응답을 제공하는 "default", "catch-all"또는 "fall back"웹 사이트가 지정되어 있습니다.
이 기본 웹 사이트는 자체 독립적 인 웹 사이트 (종종 오류 메시지가 표시 될 수 있음)이거나 웹 서버 관리자의 기본 설정에 따라 웹 서버의 다른 웹 사이트 일 수 있습니다.
설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..