해당 도메인 이름 대신 IP 주소를 입력하면 웹 사이트가 표시되지 않는 이유는 무엇입니까? [닫은]


38
> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

Chrome 93.184.216.34대신 입력 합니다 http://example.com. 웹 사이트를로드하지 않습니다. 왜?


경험상 실제 서버를 구성하지 않는 한 IP 주소를 사용해서는 안됩니다.
David Richerby

가치는 것을 강조 했다 404 HTTP 응답 : 서버로부터 응답을 얻을. 이것은 호스트 (다른 ​​쪽의 컴퓨터)와 해당 호스트에서 실행되는 일부 웹 서버 (Nginx와 같은 Linux에서 실행되는 오픈 소스라고 생각합니다)가 성공적으로 데이터를 보낸 것을 발견했음을 의미합니다.
jpmc26

답변:


107

Host실제로 원하는 사이트를 얻으려면 적절한 HTTP 헤더가 필요하기 때문에

동일한 IP 주소로 여러 웹 사이트를 호스팅 Host하고 클라이언트가 지정한 HTTP 헤더 (현재 HTTPS의 경우 TLS SNI 값)를 기반으로 웹 사이트를 구분하는 것이 매우 일반적 입니다.

즉, http://example.com브라우저에 입력 하면 Host헤더는 example.com이지만 입력 한 경우에는 그렇지 않습니다 93.184.216.34. 두 경우 모두 동일한 웹 서버에 연결되지만 다른 응답을받습니다 (이 경우 200 대 404).


4
누군가 Host가 일반적으로 어떤 웹 서버를 사용하고 무엇을 사용하는지 조금 확장 할 수 있습니까? 단어에 과부하가 걸리기 때문에 온라인으로 검색하기가 어렵습니다.
user1717828

1
tools.ietf.org/html/rfc7230#section-5.4 http 서버는 원하는 호스트 헤더를 처리합니다. 예를 들어 httpd에는 VirtualHost 구성 지시문이 있습니다.
John Mahowald

19
트윗 담아 가기 당신은 curl -H "Host: example.com" http://93.184.216.34/또는 그런 것을 할 수 있습니다.
Håkan Lindqvist

13
"웹 사이트 URL과 IP 주소 사이에는 일대일 관계가 없습니다."
Pete

1
실제로 특정 서버 (93.184.216.34 2606 : 2800 : 220 : 1 : 248 : 1893 : 25c8 : 1946)는 적어도 example.com example.net example.org example.edu 동일한 주소에서 처리하므로 호스트 헤더에 실제로 이름이 필요합니다.
dave_thompson_085

14

일반적으로 웹 서버는 "가상 서버"기술을 사용하고 요청한 도메인 이름 내에서 웹 서버의 IP 주소가 아닌 HTTP 요청에 응답 할 수 있기 때문입니다. 하나의 IP 주소에 둘 이상의 도메인 이름을 숨겨주었습니다.

예를 들어 Apache 웹 서버는 다음 섹션을 사용하여 IP 주소로 HTTP 요청에 응답 할 수 있습니다.

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

또는 구성에 VirtualHost가 전혀 사용되지 않은 경우.

Apache의 VirtualHost 기능은 1996 년에 도입되었습니다.


10

Apache 에서는 단 하나의 IP 주소를 사용하여 많은 웹 사이트를 호스팅 할 수 있습니다. 이것을 가상 호스팅이라고합니다. 독립형 도메인까지 하위 도메인을 만드는 방법입니다. 각 도메인 / 하위 도메인에 대한 VirtualHost 지시문이 포함 된 Apache 구성 파일을 설정하면됩니다.

example1.com과 example2.com이라는 두 개의 가상 호스트가있는 예제 HTTP 서버는 다음과 같습니다 (IP 주소 정의).

<VirtualHost 93.184.216.34:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost 93.184.216.34:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

다음과 같이 보일 수도 있습니다 (이름 기반 정의).

<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

두 경우 모두, 두 개의 가상 호스트 레코드가 내부적으로 메모리에 작성되고 Apache가 URI 요청이 도착한시기와 비교하기 위해 사용됩니다.

사용자가 사용자 에이전트를 통해 IP 주소를 입력하면 구성 파일에 나열된 첫 번째 가상 호스트가 기본 도메인 (이 경우 example1.com)으로 사용됩니다.

사용자가 도메인 이름을 입력하면 요청이 연결된 IPNA를 제공하는 공용 인터넷 DNS 네트워크 (ICANN)로 전송됩니다. ICANN 등록 기관 (예 : GoDaddy)을 통해 둘 다 등록했습니다. ICANN 네트워크의 모든 DNS 서버에 전파가 적용되기 전에이 두 가지가 모두 정확하고 시간이 약간 필요합니다. 요즘에는 최대 24 시간이 걸릴 수 있습니다.

요청이 Apache HTTP 서버로 라우팅되면 IP 주소 및 도메인 이름이 내부 VirtualHost 레코드 목록과 일치합니다. 하나가 발견되면 문서 루트는 오브젝트 에이전트에 대한 전체 파일 시스템 경로를 형성하여 사용자 에이전트로 다시 리턴하는 데 사용됩니다. 그렇지 않은 경우 HTTP 404가 관련 오류 문서와 함께 전송됩니다.


8

"집"용어를 사용하고 싶습니다.

집에 이름없이 편지를 쉽게 보낼 수 있으며 집에 도착할 것입니다.

상대방의 이름을 입력하면 원하는 수신자에게 전송됩니다.

목적지는 동일하지만 집에 도착했을 때 처리되는 방식이 다릅니다.

사이트 (예 : www.example.com)를 지정하면 서버는 요청을 처리하는 방법과 요청 대상 호스트 및 서비스 제공 사이트를 알고 있습니다.


이것은 유용한 은유입니다!
Redwolf Programs

+1 수신자 이름이라는 아이디어가 마음에 듭니다. 비슷한 유추를 생각했지만 IP 주소는 실제 건물 (컴퓨터)을 식별하지만 아파트 번호 (도메인 이름)는 다중 테넌트 건물의 실제 수신자를 식별합니다. 물론 이것은 지나치게 단순화 된 것으로 다중 테넌트 컴퓨터는 IP 주소 서버 만 기본 사이트를 가질 수 있지만 이것이 좋은 비유라고 생각합니다.
jmbertucci

0

검색 할 핵심 용어는 "이름 기반 가상 호스팅"입니다.

사람들은 동일한 웹 서버에 여러 호스트 이름을 할당하고 각 호스트 이름에 대해 서로 다른 컨텐츠를 제공하려고합니다. 이를 가상 호스팅이라고합니다 (최신 가상 머신 개념과 혼동하지 말 것).

초기에 가상 호스팅은 여러 IP 주소를 서버에 할당하여 수행되었으므로 서버는 사용 된 IP 주소를 기반으로 다른 내용을 보낼 수 있었지만 이는 낭비로 간주되었습니다.

따라서 "호스트"헤더는 처음에 확장으로 도입되었지만 나중에 1997 년에 http 1.1 사양의 필수 부분이되었습니다.이 헤더는 클라이언트가 요청한 호스트 이름을 지정합니다. 그런 다음 서버는 헤더 값에 따라 다른 컨텐츠를 제공 할 수 있습니다.


"하지만 이것은 낭비로 여겨졌습니다."레거시 v4 연결에만 해당됩니다. 이제 모든 가상 호스트를 다른 v6 주소에 설정할 수 있습니다.
Qwertie

1
우리는 공용 서비스 IPv6만을 만드는 것이 합리적인 일이라는 점에서 아직 멀었습니다.
Peter Green

0

웹 서버의 비용을 낮추기 위해 많은 웹 서버가 여러 웹 사이트를 호스팅합니다. apache2 / nginx / etc에서 가상 호스트 또는 Vhost를 사용하여이를 수행합니다. 따라서 웹 사이트의 IP 주소로 직접 이동하면 "Apache is working"화면이 표시되거나 웹 서버의 기본 웹 사이트로 리디렉션 될 가능성이 높습니다.

Vhost는 들어오는 웹 사이트 주소를보고 사용 가능한 Vhosts 파일의 ServerName 또는 ServerAlias ​​이름과 비교합니다. 둘 중 하나가 일치하면 해당 특정 웹 사이트가로드됩니다.

웹 사이트에 대량의로드 (고유 순 방문자 / 페이지 조회수)가 있거나 고부하 애플리케이션 (youtube.com, 페이스 북 등)을 구동하지 않는 한 공유 서버에서 운영하는 것이 더 비용 효과적 일 수 있습니다. Wordpress 블로그 웹 사이트를 운영하기 위해 전용 서버 (월 $ 60에서 시작)를 얻는 것은 돈 낭비입니다. 한 서버에 200 개 이상의 웹 사이트가있는 서버에서 공유 플랫폼을 얻는 것이 좋습니다. 비용은 $ 5 / mo의 영역에서 더 많을 것입니다.

이를 수행하는 또 다른 이유는 IP 주소가 없기 때문입니다. IPv4 주소가 충분하지 않습니다. 그것은 가정 / 비즈니스 네트워크에 NAT를 사용하고 우리가 남은 Vhost를 사용하는 것입니다. IPv6이 메인 스트림이 되더라도 서버는 Vhost (서버 비용)를 고수 할 것입니다.


0

전용 IP 주소는 비싸지 만 서버에 새 웹 사이트를 만드는 것은 기본적으로 무료입니다.

호스팅 회사는 물리적 서버를 가리키는 단일 IP 주소를 임대 한 다음 "가상 호스트"기능을 사용하여 해당 IP 주소에서 수천 개의 웹 사이트를 호스팅합니다.

우체국 주소 만 적고 상자 번호가없는 경우 사서함이있는 것처럼 생각하면 메일이 배달되지 않습니다.


0

여기에는 기술적 세부 사항에 대한 많은 답변이 있지만 가장 간단한 고급 설명은 웹 서버가 IP 주소에서 http 트래픽을 제대로 수신하더라도 일반적으로 특정 도메인에 대해 응답하도록 서버를 구성 해야 한다는 것입니다 이름 및 해당 이름은 클라이언트 (예 : 웹 브라우저)가 보낸 요청에 있어야합니다.

거의 항상 이런 방식으로 수행되기 때문에 "보통"이라고 말하지만 실제로 IP 주소 만 사용하는 경우 http 서버가 응답하도록 설정할 수있는 방법이 있습니다.


-1

가상 IP와 전용 IP의 차이점을 이해해야합니다.

웹 사이트에 전용 (공유되지 않은) IP가있는 경우 (예 : http://123.456.789.012 ) 웹 사이트를 표시합니다.

내가 소유 한 사이트의 전용 IP 주소 인 www.negativeiongenerators.com : http://75.126.128.174를 사용해보십시오. 그러나 다른 사람들이 말했듯이 일반적으로 좋은 생각은 아닙니다.


1
이것은 보편적으로 사실이 아닙니다. 웹 서버 구성에 따라 다릅니다. 전용 IP 주소를 보유하고 호스트 없이도 IP에 응답하지 않을 수 있으며 공유 IP 주소를 보유하고 IP 주소가 서버의 웹 사이트 중 하나를 가리 키도록 할 수도 있습니다. IP 주소만으로도 웹 사이트에 액세스하는 데 아무런 문제가 없지만 특별히 유용하지는 않습니다.
Qwertie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.