Sunucular yalnızca bir web sitesine sahip mi?


80

DNS’yi anladığım kadarıyla, etki alanı adını web sitesinin depolandığı sunucunun IP adresiyle bağladığı için, her sunucunun yalnızca bir web sitesini tutabileceği anlamına mı geliyor? Olmazsa, sunucunun IP adresini çağırmak, aynı sunucuda çok kişi varsa hangi web sitesini istediğimi nasıl bilir?


13
Wikipedia, Paylaşılan Web Hosting'e iyi bir giriş yaptı . Tarayıcınıza http: // <IP_ADDR> / girerseniz, HTTP isteğinin Host:başlık içinde bir etki alanı olmaz . Paylaşılan barındırma durumunda, web sunucusu sağlayıcı tarafından bunu farklı şekillerde ele alması için yapılandırılabilir (örn. Varsayılan bir, sağlayıcıya yönlendirme vb.).
Jedi

"Bu sunucu, aradığınız web sitesini hiç / şu anda hiç barındırmadı" gibi iletilerden kopan bağlantıları tıkladım.
Jesvin Jose

1
Tek bir sunucuda birden fazla uygulamayı çalıştırmak için çok fazla yol arıyorsanız, sırasıyla 8001 ve 8002 bağlantı noktalarında iki adet MyApp ve YourApp uygulamanız olduğunu söyleyin. İki yük dengeleyiciniz veya uygulama proxy sunucunuz olabilir: myapp.com ve yourapp.com. İsteklerini varsayılan bağlantı noktalarından (80/443) almalarını ve sırasıyla 8001 ve 8002 bağlantı noktalarındaki gerçek sunuculara iletmelerini sağlayın.
rohithpr

6
Harika soru Her web sitesi kendi IP adresine ihtiyaç duyardı (bir sunucu birden fazla IP adresine sahip olabilir). Açıkladığınız sorunu çözmek için HTTP / 1.1'deki Ana Bilgisayar başlığı tanıtıldı. "Internet adresi korunması" Bkz www8.org/w8-papers/5c-protocols/key/key.html
AE

6
Eğer http 1.1 ana bilgisayar başlığına sahip değilse, ipv6 şimdiye kadar uygulanacaktı ;-) :-(
Lenne

Yanıtlar:


149

Temel olarak: tarayıcı HTTP isteğinde alan adını içerir, böylece web sunucusu hangi alanın talep edildiğini bilir ve buna göre yanıt verebilir.


HTTP istekleri

Tipik HTTP isteğiniz şöyle:

  1. Kullanıcı, formda bir URL sağlar http://host:port/path.

  2. Tarayıcı, URL'nin ana bilgisayar (etki alanı) bölümünü ayıklar ve ad çözümlemesi olarak bilinen bir işlemde gerekirse IP adresini dönüştürür . Bu çeviri DNS üzerinden gerçekleşebilir, ancak zorunlu değildir (örneğin, hostsyaygın işletim sistemindeki yerel dosya DNS'yi atlar).

  3. Tarayıcı, belirtilen bağlantı noktasına bir TCP bağlantısı açar veya bu IP adresinde varsayılan olarak bağlantı noktası 80'e ayarlar.

  4. Tarayıcı bir HTTP isteği gönderir. HTTP / 1.1 için şöyle görünür:

    GET /path HTTP/1.1
    Host: example.com
    

    ( HostBaşlık HTTP / 1.1'de standart ve zorunludur. HTTP / 1.0 belirtiminde belirtilmemiş, ancak bazı sunucular yine de desteklemektedir.)

Buradan, web sunucusu cevabın ne olması gerektiğine karar vermek için kullanabileceği çeşitli bilgiler içerir. Tek bir web sunucusunun birden fazla IP adresine bağlanmasının mümkün olduğunu unutmayın.

  • TCP soketinden istenen IP adresi
    • İstemcinin IP adresi de mevcuttur, ancak bu nadiren kullanılır - bazen engelleme / filtreleme için
  • TCP soketinden istenen port
  • İstenen ana bilgisayar adı, HostHTTP isteğindeki tarayıcı tarafından başlıkta belirtildiği şekilde .
  • İstenen yol
  • Diğer başlıklar (çerezler vb.)

Farkında göründüğünüz gibi, bugünlerde en yaygın paylaşılan barındırma kurulumu, birden fazla web sitesini tek bir IP adresine yerleştirir: bağlantı noktası birleşimi, yalnızca Hostweb siteleri arasındaki farkı ayırt eder.

Bu, Apache ülkesinde Ad Tabanlı Sanal Konak olarak bilinirken, Nginx bunları Sunucu Bloklarında Sunucu Adları olarak adlandırır ve IIS, Sanal Sunucu'yu tercih eder .


HTTPS'den ne haber?

HTTPS biraz farklı. Her şey TCP bağlantısının kurulmasıyla aynıdır, ancak bundan sonra şifreli bir TLS tüneli kurulmalıdır. Amaç, istekle ilgili hiçbir bilgiyi sızdırmamak.

Sunucunun gerçekte bu etki alanına sahip olduğunu doğrulamak için, sunucunun güvenilir bir üçüncü tarafça imzalanmış bir sertifika göndermesi gerekir. Tarayıcı daha sonra bu sertifikayı istediği alanla karşılaştıracak.

Bu bir sorun sunuyor. Sunucu, HTTP isteği alınmadan önce bunu yapması gerekiyorsa hangi ana bilgisayarın (web sitesinin) sertifikasının gönderileceğini nasıl biliyor?

Geleneksel olarak bu, HTTPS gerektiren her web sitesi için özel bir IP adresine (veya bağlantı noktasına) sahip olarak çözülmüştür. Açıkçası, IPv4 adresleri tükendiğinde bu sorunlu hale geliyor.

SNI (Sunucu Adı Gösterimi) girin . Tarayıcı şimdi TLS görüşmeleri sırasında ana bilgisayar adını geçirir, bu nedenle sunucu bu bilgiyi doğru sertifikayı gönderecek kadar erken alır. Sunucu tarafında, yapılandırma, HTTP sanal ana makinelerinin nasıl yapılandırıldığına çok benzer.

Dezavantajı, ana bilgisayar adının şimdi şifrelemeden önce düz metin olarak geçirilmesidir ve esasen sızdırılmış bilgidir. Bu, genellikle ana bilgisayar adının normal olarak bir DNS sorgusuna zaten maruz kaldığı düşünülürse, kabul edilebilir bir tradeoff olarak kabul edilir.


Bir siteyi yalnızca IP adresine göre talep ederseniz?

Sunucunun, hangi belirli ana bilgisayarı istediğinizi bilmediği durumda ne yapacağı, sunucu uygulamasına ve yapılandırmasına bağlıdır. Genellikle, bir ana bilgisayarı açıkça belirtmeyen tüm isteklere yanıtlar verecek bir "varsayılan", "catchall" veya "geri dönüş" sitesi vardır.

Bu varsayılan site kendi bağımsız sitesi olabilir (genellikle bir hata mesajı gösterir) veya sunucu yöneticisinin tercihine bağlı olarak sunucudaki diğer sitelerden biri olabilir.


1
Ayrıca, bir site, Heroku ve Amazon gibi, yük dengeleyicilerde olduğu gibi, birçok sunucuya bölünebilir.
phyrfox

1
@phyrfox Yea, bunu eklemeyi düşündüm, ama bu soruya sadece teğetsel bir şekilde bağlı ve cevabı çok uzun yapmak istemedim. Belki daha sonra bunun için bir bölüm ekleyebilir.
Bob

Efsaneye göre alt etki alanları ağ içinde belirli bilgisayarları işaret ediyor. Teoride
Loupax

"Geleneksel olarak, bu HTTPS gerektiren her web sitesi için ayrı bir IP adresi (veya bağlantı noktası) olmasıyla çözüldü. Açıkçası, IPv4 adresleri tükenmeye başladığımızda, bu sorunlu hale geliyor." .
Lenne

92

Teknoloji dışı insanlar için bu açıklamaya sahibim.

Jack, Jill ve Joe bir yurtta yaşıyor ve cep telefonları yok.

Telefon defterinde, hepsi aynı numarayla listelenir. (Rekor)

Numarayı tuşlarsınız ve biri telefonu açar; "Jill ile konuşmak istiyorum" dersin, hatta onu takip et.

Telefon defterinde bir A kaydı (bir telefon numarası / IP adresi) yerine, sadece "Yurt X" diyebilir, ardından Yurt X için daha fazla aramanız gerekir. Bu bir CNAME kaydıdır.

Jill müsait değilse, alabilirsiniz

  • 404 Jill burada değil
  • 410 Jill öldü.
  • 301 Jill Peter ile taşındı
  • 302 Jill Peter'ı ziyaret ediyor, onun yerine onu ara

  • 400 Seni anlayamıyorum.

  • 401 Sen kimsin? Şifre nedir? veya Erkek arayanların akşam saat 10'dan sonra izin vermemesi
  • 402 Ödeme Gerekiyor (Jill'in gerçek adı olduğundan emin misiniz ;-))
  • 403 Hayır, doğru şifre değil.
  • 418 Jill bir çaydanlık :-)
  • 429 Jill daha fazla çağrı alamaz.
  • 451 Yasaklama emrinizi ihlal ediyorsunuz.

  • 500 Telefon sistemimiz bozuldu.


Meraklı için, 418'in arkasındaki RFC tools.ietf.org/html/rfc2324 ve ilginç bir makale sitesdoneright.com/blog/2013/03/… :)
Wordzilla

6

DNS’yi anladığım kadarıyla, etki alanı adını web sitesinin depolandığı sunucunun IP adresiyle bağladığı için, her sunucunun yalnızca bir web sitesini tutabileceği anlamına mı geliyor?

Öncelikle, burada çok sayıda farklı kavram olduğunu anlamanız gerekir.

  • Web sitesi, tutarlı bir bütün oluşturan bir web sayfaları grubudur.
  • IP adresi, internet protokolü tarafından trafik için kaynak veya hedef olarak kullanılan sayısal bir adres (IPv4 için 32 bit, IPv6 için 128 bit).
  • Sunucu, işi istemcilerden gelen isteklere hizmet verecek bir makine.
  • Ana makine adı, DNS'deki bir makineyi tanımlamak için kullanılan bir ad (ör. "Www.example.com" veya "en.wikipedia.org")

Bunların hiçbiri arasında bire bir ilişki yok. Bir sunucu birden fazla IP adresine sahip olabilir; birden fazla ana bilgisayar adı bir IP adresini gösterebilir; bir ana bilgisayar adı birden fazla IP adresini gösterebilir. Birden fazla web sitesi aynı ana bilgisayar adı altında olabilir. Bir web sitesi birden fazla ana bilgisayara yayılmış olabilir.

Olmazsa, sunucunun IP adresini çağırmak, aynı sunucuda çok kişi varsa hangi web sitesini istediğimi nasıl bilir?

Eski günlerde (HTTP 1.0 ve öncesi), sunucunun farklı şekilde ele almak istediği her ana bilgisayar adının kendi IP adresine sahip olması gerekiyordu. Bu oldukça israf oldu.

HTTP 1.1, Host"HTTP isteğinde zorunlu bir alan olarak başlık ekledi (IIRC, bazı satıcılar bunu daha önce bir uzantı olarak desteklemişti). IP adresi İstemcilerde HTTP 1.1 desteği şimdi her yerde.

Ne yazık ki, SSL (daha sonra TLS) bir kırışıklık ekledi. Bir SSL / TLS oturumu oluşturmak, sunucunun istenen ana bilgisayar adını kapsayan müşteriye bir sertifika sunmasını gerektirir, ancak HTTP isteği, SSL / TLS oturumu kuruluncaya kadar gelmez.

Bir sertifikanın SubjectAltNamealanın kullanımı veya alandaki joker karakterlerin kullanılması yoluyla birden fazla ana bilgisayar adını kapsaması mümkündür CommonName. Bununla birlikte, özellikle içerilen host isimleri farklı mülkiyet alanlarına sahipse, idari zorluklar ortaya çıkar.

Böylece TLS, "sunucu adı göstergesi" (SNI) uzantısını tanıttı. Bu uzantıyla, müşteri istenen ana bilgisayar adını TLS anlaşması prosedürü sırasında sunucuya gönderir. Sunucu daha sonra uygun sertifikayı sunabilir. Maalesef, tüm büyük SSL / TLS uygulamalarının mevcut sürümleri SNI'yi desteklerken, eski sürümlerin kullanımdan çıkması uzun zaman aldı.


TCP'nin birçok portta dinleyebileceğini, her birinde farklı sunucular çalıştırabileceğini söylemeyi unuttun ...
Toby Speight

Evet, ama dns'de portnunuz yok ve joe.p.user'ın bizim için muhteşem sitemize girmesini bekleyemezsiniz. Ayrıca, bazı güvenlik duvarları standart olmayan portnelere giden erişimi engelliyor.
Lenne

3

Cevap, bazı cevapların verdiğinden biraz daha karmaşık. DNS araması yaptığınızda bir IP adresi almalısınız ( IPv6 için IPv6 için Akayıt AAAA). İletişim kurmak için TCP / IP üzerinden bir soket açabilmelisiniz, aksi halde her şey başarısız olur. Bu adres bir sunucuyu temsil edebilir veya bir yük dengeleyicisini temsil edebilir. Proxy bile temsil edebilir. Eğer ana bilgisayar CloudFlare’ın arkasındaysa, örneğin, aldığınız adres bir CloudFlare sunucusudur. Gerçek sunucu başka bir yerde. Bu, sunucunun Hizmet Reddi saldırıları gibi sorunlardan kaçınmasını sağlar.

Sanal barındırma hakkında sormak istediğin şey (bu konuya değinilen diğer sorulardan bazıları, ama hiçbir ayrıntıda değil). Sanal barındırma web isteğini alır ve hangi web sitesinin sunulacağını belirlemek için ana bilgisayar adına (örneğin domain.com) bakar. Böylece Apache HTTP web sunucusunda böyle bir konfigürasyona sahip olursunuz.

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com

    DocumentRoot /var/www/domain.com
</virtualHost>

Bu, örneğin basitleştirilmiştir. Bu yüzden Apache'ye herhangi bir IP'nin 80 numaralı portunu dinlemesini söylüyoruz (modern sanal makinede makinenizin IP'sini barındıran canlı IP'sinden farklı olabilir). Daha sonra, bunun domain.comweb sitesi olduğunu ve web sitesinin hangi dizinde bulunduğunu söyledik. Ardından Apache'ye farklı web sitelerinin kullanımını bildirmek için bu bloğu tekrar tekrar yapabiliriz. Her web sunucusu bu tip bir sistemi destekler.

Bunun üstesinden gelmenin başka bir yolu, web sunucusuna tüm web trafiğini tek bir programlama komut dosyasına (örn. PHP, ASP.NET, vb.) Yönlendirmesini sağlamak ve ardından bu komut dosyası hangi web sitesinin ve sayfanın gösterileceğini belirleyecektir.


1

DNS kullanarak, istediğiniz bir IP adresine istediğiniz kadar ad atayabilirsiniz ( hosts dosyanızda her bir adı, örneğin boşluklarla ayırabilirsiniz). Bir DNS sunucusu kullanarak, tek bir isme birden fazla IP adresi atayabilirsiniz . Bire bir ilişki ile sınırlı değildir.

Bir web sunucusu , istenen URL'yi inceleyerek hangi sitenin hizmet vereceğini bilir . Hangi etki alanının istendiğine, istenen bağlantı noktasının ve hangi protokolün kullanıldığına bakar. Bunun DNS ile ilgisi yoktur ve HTTP protokolü tarafından ele alınır.


0

Web sunucusu ana kabın kavramını (vardır burada Tomcat belgeleri örneğin gelir). Birden fazla alana hizmet vererek aynı kutu / ip adresi için birden çok ana bilgisayar kabı yapılandırılabilir. Konteynerlerin bağımsız çalışma dizinleri, kimlik doğrulama bölgeleri, günlük rehberleri ve benzeri şeyleri vardır.

Sunucu, yeni istek için ilgili kapsayıcıyı bulur alan adı satın alırken bu HTTP isteğinin bir parçasıdır

Tamamen farklı web sunucusu örnekleri, farklı bağlantı noktalarında çalışırlarsa aynı IP adresini paylaşabilir. Bu, üretim sunucusu rastgele bağlantı noktasında çalıştıramadığından, etki alanı adlarının bulunamadığı çeşitli geliştirme ve test ortamlarında kullanılır.

Son olarak, bir web sitesi için kesinlikle benzersiz bir IP adresi gerekli olsa bile, bir sunucu kutusu genellikle birden fazla ağ bağdaştırıcısına sahiptir, bu nedenle birden fazla IP adresi kullanacak şekilde yapılandırılır.


0

Sunucu IP adresiniz aynı anda birçok farklı alan adını tutabilir.

Web sitesine eriştiğinizde tarayıcınız, içinde etki alanı adı bulunan bir HTTP isteği gönderir ve sunucu size hangi web sitesi verilerini geri göndereceğini bulabilir.

Sanal ana bilgisayarlar denir, bu kadar basit :)

DNS ve sanal ana bilgisayarlar hakkında daha fazla bilgi için buraya bir göz atın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.