Bagaimana Anda memiliki satu alamat IP dan banyak situs web?

27

Bagaimana saya bisa memilikinya di mana saya memiliki satu alamat IP yang duduk di Internet tetapi banyak nama web? Misalnya, ketika perusahaan hosting memiliki IP bersama tetapi saya mendapatkan nama domain tak terbatas (bersama semua orang di kotak itu).

Saya memiliki kotak di Internet tetapi saya ingin menunjuk ke mesin lain yang menyimpan situs web yang berbeda ketika seseorang mengetik di www yang berbeda (itu berada tepat di sebelahnya hanya dalam kotak yang berbeda). Apakah itu semua subdomain? Terima kasih.

Saya adalah perusahaan hosting

johnny
sumber

Jawaban:

36

Itu bagian dari protokol HTTP 1.1.

Secara khusus, protokol HTTP 1.1 mencakup tajuk yang disebut "host:" yang menentukan situs web mana pada server tertentu yang berusaha diakses oleh klien.

Jadi, jika snoopy.net dan woodstock.org sama-sama membagikan 192.0.32.10 dan browser Anda mencoba untuk mendapatkan konten dari http://snoopy.net/doghouse permintaan http spesifik akan terlihat seperti:

GET /doghouse HTTP/1.1
Host: snoopy.net

Jika url yang diinginkan adalah http://woodstock.org/seedspermintaan akan terlihat seperti

GET /seeds HTTP/1.1
Host: woodstock.org

Dalam kedua kasus, akan ada soket tcp antara komputer Anda dan port 80 dari server. Server akan tahu untuk mendapatkan konten dari /var/www/snoopy.net atau /var/www/woodstock.org/ berdasarkan header Host.

Akan ada tajuk lain untuk kuki dan hal-hal lain seperti jenis peramban dan konten yang diizinkan, tetapi tajuk "Host" secara khusus adalah yang memungkinkan server web untuk mengetahui situs web virtual mana yang diinginkan.

Ada lagi di RFC2616 .

Ini juga mengapa situs https * harus *** memiliki alamat IP mereka sendiri - pertukaran kunci ssl dan verifikasi sertifikat dilakukan sebelum transaksi http, sehingga server http tidak akan tahu untuk memberikan sertifikat untuk "woodstock." org "atau" snoopy.net "ketika menerima koneksi https pada port 443 dari 192.0.32.10.


sunting

** di komentar Grawity menunjukkan bahwa ada ekstensi ke SSL dalam spesifikasi TLS yang memungkinkan server untuk mengetahui situs web mana yang berusaha diakses oleh pengguna, dan bahwa sebagian besar browser web modern memiliki ekstensi ini, jadi harus agak terlalu kuat.

chris
sumber
jadi server web akan melihat header itu dan memindahkannya ke situs web yang benar? Bisakah Anda memiliki beberapa situs web pada port yang sama seperti itu?
johnny
1
Untuk itulah tepatnya. Satu "server" seperti apache, memiliki port 80 dari 192.0.32.10 yang memiliki banyak entri DNS, yang masing-masing adalah "situs". Server tahu situs apa yang diinginkan berdasarkan pada header "host".
chris
3
DNS dikonfigurasi untuk membuat kedua nama menunjuk ke alamat IP yang sama, di mana server mendengarkan. Server menerima koneksi pada IP dan port yang sama, tetapi kemudian, ketika browser mengatakan "Saya ingin SiteA.com", ia tahu itu perlu memberikan konten yang berbeda daripada ketika diminta untuk SiteB.com.
Massimo
2
Untuk menjadi lebih jelas: kedua situs dibedakan pada tingkat protokol HTTP, bukan pada tingkat TCP / IP. Ini seperti ketika seseorang menelepon kantor Anda dan meminta untuk berbicara dengan John atau Susan: nomor teleponnya sama, tetapi lebih dari satu orang dapat menggunakannya.
Massimo
1
Sebagian besar browser dan server sekarang mendukung TLS Server Name Indication, yang menghilangkan persyaratan satu alamat IP per situs web.
grawity
12

Ada sesuatu yang dikirim oleh semua browser modern beserta permintaannya, yang disebut Header "Host:".

Permintaan sebenarnya yang dikirim firefox untuk halaman ini adalah:

Host: superuser.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Terima: teks / html, aplikasi / xhtml + xml, aplikasi / xml; q = 0,9, * / *; q = 0,8
Bahasa Terima: en-us, en; q = 0,5
Terima-Pengkodean: gzip, deflate
Terima-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Keep-Alive: 300
Koneksi: tetap hidup

Seperti yang Anda lihat,

Host: superuser.com
bit mengidentifikasi situs web yang dimaksud.

Di IIS dan Apache, Anda dapat mengonfigurasi Situs Web Virtual yang hanya menerima permintaan dari kombinasi IP / Host tertentu.

Adapun masalah khusus Anda, Anda harus membaca tentang bagaimana perusahaan hosting khusus Anda ingin Anda meminta konfigurasi.

John Gietzen
sumber
Ini juga harus menyebutkan bahwa Anda perlu mengatur beberapa entri DNS untuk alamat IP Anda.
Tadeusz A. Kadłubowski
@Tadeusz: Dimungkinkan untuk mengatur entri DNS wildcard, jadi ini tidak sepenuhnya diperlukan.
John Gietzen
6

Teknik untuk hosting lebih dari satu domain / subdomain pada satu alamat IP / host disebut host virtual . Permintaan http get berisi nama domain untuk permintaan yang memungkinkan server web untuk mencocokkan permintaan dengan domain virtual tertentu.

Jika Anda memiliki beberapa host fisik secara internal dengan hanya satu IP eksternal maka Anda ingin melihat pengaturan proxy terbalik untuk meneruskan permintaan ke mesin / alamat IP internal yang benar.

Pengaruh 3d
sumber
atau Anda bisa server http lain pada port yang berbeda juga tentunya.
Chopper3
Ya itu juga merupakan pilihan. Tetapi orang-orang tidak terbiasa harus menentukan port ketika mereka mengetikkan url jadi saya akan memesan solusi untuk beberapa situasi seperti antarmuka admin.
3dinfluence
3

Fitur pada server web Anda biasanya disebut 'host virtual'. Setelah Anda menunjuk entri dns untuk menunjuk ke satu alamat IP (seperti yang disebutkan dalam jawaban lain) server kemudian akan server situs yang berbeda tergantung pada apa host yang diminta.

Sejauh menunjuk ke kotak lain pergi. Anda dapat mengonfigurasi pengalihan di sebagian besar server web jika Anda mengharapkan untuk mendapatkan kueri terlebih dahulu. Jika Anda berbicara tentang subdomain maka yang Anda lakukan hanyalah mengarahkan masing-masing sub domain ke alamat ip yang berbeda.

yaitu host.com -> IP 1 lalu www.host.com -> IP 2 dan mail.host.com -> IP 3

Jika Anda menginginkan jawaban yang lebih spesifik, Anda perlu mengatakan perangkat lunak server web apa pada sistem operasi yang Anda jalankan.

Anda mungkin menemukan ServeFault adalah tempat yang lebih baik untuk pertanyaan ini.

Colin Newell
sumber
1

Pendeknya...

Satu - Setel entri DNS untuk berbagai domain Anda ke semua titik ke kotak Anda.

Dua - Seperti yang dijelaskan oleh orang lain, atur server web Anda (Anda tidak mengatakan yang mana) agar cocok dengan nama host yang diminta.

Dengan begitu semua permintaan untuk semua domain Anda pergi ke mesin yang sama dan konfigurasi itu mengambil domain yang diminta dan merutekannya ke folder kanan yang berisi konten situs itu.

Garry
sumber
0

Kedengarannya bagi saya dari pertanyaan Anda seperti Anda memiliki server fisik yang terpisah untuk situs web kedua. Dalam hal ini Anda tidak akan dapat menggunakan alamat IP tunggal untuk dua server. Anda dapat a) mendapatkan alamat IP publik kedua untuk host kedua Anda atau b) mengatur proxy cerdas yang meneruskan permintaan ke server yang berbeda di jaringan internal Anda berdasarkan header host. Saya cukup yakin bahwa b) mungkin tetapi saya tidak tahu bagaimana cara kerjanya, jadi Anda harus bertanya kepada orang lain apakah itu yang ingin Anda lakukan.

Catherine MacInnes
sumber
0

Jika saya membaca pertanyaan Anda dengan benar, Anda memiliki dua komputer berbeda yang berbagi alamat IP melalui NAT (Terjemahan Alamat Jaringan)? Jika demikian, Anda harus memiliki satu situs mendengarkan pada port yang berbeda (bukan 80) - tidak ada cara yang baik saya tahu untuk memiliki router mengirim permintaan ke komputer yang berbeda berdasarkan metadata HTTP "Host". Anda lebih baik hanya mendapatkan alamat IP kedua untuk server kedua Anda.

CarlF
sumber