Mengapa mengetik alamat IP alih-alih nama domain yang sesuai tidak menunjukkan situs web? [Tutup]


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

Saya mengetik 93.184.216.34alih-alih http://example.comdi Chrome. Itu tidak memuat situs web. Mengapa?


Sebagai aturan praktis, manusia tidak boleh menggunakan alamat IP, kecuali mengkonfigurasi server yang sebenarnya.
David Richerby

Patut ditekankan bahwa Anda memang mendapatkan respons dari server: respons HTTP 404. Ini berarti bahwa ia berhasil menemukan host (komputer di sisi lain) dan beberapa server web (saya kira sesuatu open source yang berjalan di Linux, seperti Nginx) yang berjalan di host itu mengirim kembali data.
jpmc26

Jawaban:


107

Karena Hostheader HTTP yang tepat sering diperlukan untuk benar-benar mendapatkan situs yang dimaksud.

Sangat umum untuk meng-host beberapa situs web pada alamat IP yang sama dan membedakannya berdasarkan Hostheader HTTP yang ditentukan oleh klien (serta nilai TLS SNI saat ini dalam kasus HTTPS).

Yaitu, ketika Anda masuk http://example.comke browser Anda Hosttajuk itu example.com, tapi itu tidak terjadi ketika Anda memasukkan 93.184.216.34. Anda mencapai server web yang sama dalam kedua kasus, tetapi Anda menerima respons berbeda (dalam kasus khusus ini 200 vs 404).


4
Bisakah seseorang memperluas sedikit tentang apa yang Hostdilakukan dan untuk apa server web menggunakannya? Agak sulit untuk mencari online karena kata itu sangat kelebihan.
user1717828

1
tools.ietf.org/html/rfc7230#s-5-5.4 Server http memproses header Host yang diinginkan. httpd misalnya memiliki arahan konfigurasi VirtualHost.
John Mahowald

19
@SergiyKolodyazhnyy Tentu. Anda bisa curl -H "Host: example.com" http://93.184.216.34/atau sesuatu seperti itu.
Håkan Lindqvist

13
Mengutip - "tidak ada hubungan satu-ke-satu antara URL untuk situs web dan alamat IP."
Pete

1
Bahkan server tertentu (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) menangani setidaknya example.com example.net example.org example.edu pada alamat yang sama, itulah sebabnya mengapa benar-benar membutuhkan nama di header Host.
dave_thompson_085

14

Karena biasanya server web menggunakan teknologi "server virtual" dan dapat menjawab permintaan HTTP Anda persis dengan nama domain yang Anda minta, tetapi bukan alamat IP dari server web. Berkat menyembunyikan lebih dari satu nama domain pada satu alamat IP.

Misalnya, server web Apache dapat menanggapi permintaan HTTP Anda dengan alamat IP menggunakan bagian ini:

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

atau jika Tidak Ada VirtualHost digunakan dalam konfigurasi sama sekali.

Fitur VirtualHost di Apache diperkenalkan pada tahun 1996.


10

Di Apache , Anda dapat meng-host banyak situs web hanya dengan menggunakan satu alamat IP. Ini disebut hosting virtual. Begitulah cara subdomain dapat dibuat, bahkan domain mandiri. Ini dilakukan dengan menyiapkan file konfigurasi Apache yang berisi arahan VirtualHost untuk setiap domain / subdomain.

Contoh server HTTP yang memiliki dua host virtual, example1.com dan example2.com dapat terlihat seperti ini (definisi alamat 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>

Bisa juga terlihat seperti ini (definisi berbasis nama):

<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>

Dalam kedua kasus, dua catatan host virtual dibuat secara internal dalam memori dan digunakan oleh Apache untuk membandingkan terhadap ketika permintaan URI tiba.

Ketika pengguna mengetikkan alamat IP melalui agen pengguna, host virtual pertama yang tercantum dalam file konfigurasi digunakan sebagai domain utama (yaitu dalam hal ini example1.com).

Saat pengguna mengetikkan nama domain, permintaan dikirim ke jaringan DNS Internet publik (ICANN) yang menyediakan alamat IP yang terkait dengannya. Anda mendaftarkan keduanya melalui pendaftar ICANN (seperti GoDaddy). Anda harus memiliki keduanya dengan benar dan memberikan waktu sebelum propagasi menguasai semua server DNS di jaringan ICANN. Hari-hari ini bisa memakan waktu hingga 24 jam.

Ketika permintaan dialihkan ke server HTTP Apache Anda, alamat IP dan nama domain dicocokkan dengan daftar catatan VirtualHost internal. Ketika satu ditemukan, root dokumen digunakan untuk membentuk path sistem file lengkap ke sumber daya objek untuk kembali ke agen pengguna. Jika tidak, HTTP 404 dikirim beserta dokumen kesalahan apa pun yang terkait dengannya.


8

Saya suka menggunakan terminologi "rumah".

Anda dapat dengan mudah mengirim surat ke rumah tanpa nama dan akan tiba di rumah.

Jika Anda memasukkan nama orang tersebut di atasnya, maka Anda mengirim ke penerima yang dimaksud.

Tujuannya sama tetapi cara penanganannya ketika sampai di rumah berbeda.

Saat Anda menentukan situs, yaitu www.example.com, maka server tahu bagaimana menangani permintaan dan host mana yang dimaksudkan untuknya dan situs mana yang akan dilayani kembali.


Ini adalah metafora yang membantu!
Program Redwolf

+1 Saya menyukai gagasan tentang nama penerima. Saya sedang memikirkan analogi yang sama tetapi dengan Alamat IP mengidentifikasi bangunan fisik (komputer) tetapi nomor apartemen (nama domain) mengidentifikasi penerima sebenarnya di gedung multi-penyewa. Tentu saja, ini adalah penyederhanaan yang berlebihan dan komputer multi-tenant dapat memiliki server alamat IP hanya situs default, tapi saya pikir ini adalah analogi yang baik.
jmbertucci

0

Istilah kunci untuk mencari adalah "hosting virtual berbasis nama".

Orang ingin mengalokasikan beberapa nama host ke server web yang sama dan menyajikan konten yang berbeda untuk setiap nama host. Ini dikenal sebagai hosting virtual (jangan bingung dengan konsep mesin virtual yang lebih baru).

Awalnya virtual hosting dilakukan dengan mengalokasikan beberapa alamat IP ke server, server kemudian dapat mengirim konten yang berbeda berdasarkan alamat IP yang digunakan, tetapi ini dianggap boros.

Oleh karena itu header "host" diperkenalkan, awalnya sebagai ekstensi tetapi kemudian membuat bagian wajib dari spesifikasi http 1.1 pada tahun 1997. Header ini menentukan hostname yang diminta klien. Server kemudian dapat menyajikan konten yang berbeda berdasarkan nilai header.


"Tapi ini dianggap boros." Hanya untuk koneksi v4 yang lama. Sekarang sangat mungkin untuk mengatur setiap host virtual pada alamat v6 yang berbeda.
Qwertie

1
Kami masih jauh dari titik di mana membuat layanan IPv6 Anda yang menghadap publik hanya merupakan hal yang wajar untuk dilakukan.
Peter Green

0

Untuk menekan biaya server web, banyak server web meng-host beberapa situs web. Mereka melakukan ini dengan menggunakan host virtual, atau Vhosts, di apache2 / nginx / etc. Jadi, jika Anda langsung menuju ke Alamat IP situs web, kemungkinan besar Anda akan mendapatkan layar "Apache berfungsi", atau bahkan mungkin dialihkan ke situs web utama server web.

Vhost melihat alamat situs web yang masuk dan membandingkannya dengan nama ServerName atau ServerAlias ​​dalam file Vhosts yang diaktifkan. Jika salah satunya cocok, situs web tertentu dimuat.

Kecuali situs web memiliki beban besar (jumlah pengunjung unik / tampilan halaman) yang tinggi atau mendorong aplikasi beban tinggi (pikirkan youtube.com, facebook, dll.) Mungkin lebih hemat biaya untuk beroperasi di server bersama. Ini akan membuang-buang uang untuk mendapatkan server khusus (mulai dari $ 60 / bln) hanya untuk menjalankan situs web blog Wordpress. Anda lebih baik mendapatkan platform bersama di server dengan mungkin 200+ situs web di satu server. Biaya akan lebih banyak di area $ 5 / bln.

Alasan lain untuk melakukan ini adalah kurangnya alamat IP. Tidak ada cukup alamat IPv4 yang tersisa. Hanya melalui penggunaan NAT untuk jaringan rumah / bisnis dan penggunaan Vhosts yang tersisa. Bahkan ketika IPv6 menjadi aliran utama, server mungkin akan tetap berpegang pada Vhosts (biaya server).


0

Alamat IP khusus mahal, sementara membuat situs web baru di server pada dasarnya gratis.

Apa yang terjadi adalah bahwa perusahaan hosting menyewakan satu alamat IP yang menunjuk ke server fisik, lalu meng-host ribuan situs web pada alamat IP tersebut menggunakan fitur "virtual host"

Berpikirlah seperti PO Box, jika Anda hanya menuliskan alamat kantor pos tetapi tanpa nomor kotak, surat tidak akan dikirimkan.


0

Ada banyak jawaban di sini dengan detail teknis, tetapi saya pikir penjelasan tingkat tinggi yang paling sederhana adalah bahwa bahkan jika server web mendengarkan dengan benar lalu lintas http pada alamat IP-nya, server biasanya juga harus dikonfigurasi untuk menjawab untuk domain tertentu nama, dan nama itu harus dalam permintaan yang dikirim oleh klien (yaitu browser web)

Saya katakan "biasanya" karena hampir selalu dilakukan dengan cara ini, tetapi sebenarnya ada metode di mana Anda dapat mengatur server http untuk menjawab jika hanya alamat IP yang digunakan.


-1

Kita perlu memahami perbedaan antara IP Virtual dan IP Khusus.

Jika situs web memiliki IP khusus (tidak dibagi), maka (misalnya) http://123.456.789.012 akan memunculkan situs web.

Coba ini, yang merupakan alamat IP khusus dari situs yang saya miliki, www.negativeiongenerators.com: http://75.126.128.174 Tapi seperti yang dikatakan orang lain, biasanya itu bukan ide yang baik.


1
Ini tidak benar secara universal. Itu tergantung pada konfigurasi server web. Anda dapat memiliki alamat IP khusus dan masih tidak menanggapi IP tanpa host dan Anda juga dapat memiliki alamat ip bersama dan memiliki titik alamat IP ke salah satu situs web di server. Juga tidak ada yang salah dengan mengizinkan akses ke situs web melalui alamat ip-nya saja walaupun tidak terlalu berguna.
Qwertie
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.