Начална » как да » Дали уеб сървърите държат само един уебсайт?

    Дали уеб сървърите държат само един уебсайт?

    Когато за пръв път започнете да учите как имената на домейните, IP адресите, уеб сървърите и уебсайтовете отговарят и работят заедно, понякога може да е малко объркващо или преобладаващо. Как е настроено да работи толкова гладко? Днешната публикация за въпроси и отговори SuperUser има отговори на любопитни въпроси на читателя.

    Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.

    Снимката е предоставена от Rosmarie Voegtli (Flickr).

    Въпроса

    Четецът на суперпотребител user3407319 иска да знае дали уеб сървърите притежават само по един уебсайт:

    Въз основа на това, което разбирам за DNS и свързването на име на домейн с IP адреса на уеб сървъра, на който се съхранява уебсайтът, означава ли това, че всеки уеб сървър може да притежава само един уебсайт? Ако уеб сървърите заемат повече от един уебсайт, тогава как се решават всички проблеми, така че да мога да получа достъп до уебсайта, който искам, без никакви проблеми или да смесвам?

    Дали уеб сървърите притежават само по един уебсайт или имат повече?

    Отговорът

    Сътрудникът на SuperUser Боб има отговор за нас:

    По принцип, браузърът включва името на домейна в HTTP заявката, така че уеб сървърът знае кой домейн е поискан и може да реагира съответно.

    HTTP Заявки

    Ето как се случва типичното ви HTTP заявка:

    1. Потребителят предоставя URL адрес във формата http: // host: port / path.

    2. Браузърът извлича частта на хоста (домейна) от URL адреса и я превежда в IP адрес (ако е необходимо) в процес, известен като резолюция на имената. Този превод може да се осъществи чрез DNS, но не е задължително (например файлът на локалните хостове в обичайните операционни системи заобикаля DNS).

    3. Браузърът отваря TCP връзка към посочения порт или по подразбиране е порт 80 на този IP адрес.

    4. Браузърът изпраща HTTP заявка. За HTTP / 1.1 изглежда така:

    Заглавната част на хоста е стандартна и се изисква в HTTP / 1.1. Той не е посочен в спецификацията HTTP / 1.0, но някои сървъри го поддържат.

    Оттук уеб сървърът разполага с няколко информация, които може да използва, за да реши какъв трябва да бъде отговорът. Имайте предвид, че е възможно един уеб сървър да бъде свързан с множество IP адреси.

    • Исканият IP адрес от TCP сокета (IP адресът на клиента също е наличен, но това рядко се използва, а понякога и за блокиране / филтриране)
    • Исканият порт от TCP сокета
    • Заявеното име на хост, както е посочено в заглавната част на хоста от браузъра в HTTP заявката
    • Заявеният път
    • Всички други заглавия („бисквитки“ и т.н.)

    Както изглежда сте забелязали, най-често срещаните настройки за споделен хостинг в днешно време поставят няколко уебсайта на един IP адрес: комбинация от портове, оставяйки само хостът да прави разлика между уебсайтове.

    Това е известно като име-базиран виртуален хост в Apache-land, докато Nginx ги нарича имена на сървъри в сървърни блокове, а IIS предпочита Virtual Server \ t.

    Какво става с HTTPS?

    HTTPS е малко по-различен. Всичко е идентично до установяването на TCP връзката, но след това трябва да бъде създаден шифрован TLS тунел. Целта е да не изтече информация за заявката.

    За да се уверите, че уеб сървърът всъщност притежава този домейн, уеб сървърът трябва да изпрати сертификат, подписан от доверена трета страна. След това браузърът ще сравни този сертификат с искания от него домейн.

    Това представлява проблем. Как уеб сървърът знае кой сертификат за хост / уебсайт трябва да изпрати, ако трябва да направи това, преди да бъде получена HTTP заявката?

    Традиционно, това беше решено чрез наличието на специален IP адрес (или порт) за всеки уебсайт, който изисква HTTPS. Очевидно това е станало проблематично, тъй като вече нямаме IPv4 адреси.

    Въведете SNI (индикация на името на сървъра). Браузърът вече предава името на хоста по време на TLS преговорите, така че уеб сървърът разполага с тази информация достатъчно рано, за да изпрати правилния сертификат. От страна на уеб сървъра, конфигурацията е много подобна на конфигурирането на HTTP виртуални хостове.

    Недостатъкът е името на хоста, който сега се предава като обикновен текст преди криптиране и по същество е изтекъл информация. Това обикновено се счита за приемлив компромис, макар че като се има предвид името на хоста, обикновено се показва в DNS заявка.

    Какво, ако поискате уебсайт само от IP адрес?

    Какво прави уеб сървър, когато не знае кой конкретен хост сте поискали, зависи от изпълнението и конфигурацията на уеб сървъра. Обикновено има зададен уебсайт „по подразбиране“, „улавяне на всички“ или „отстъпване“, който ще даде отговори на всички заявки, които не посочват изрично хост.

    Този уебсайт по подразбиране може да бъде собствен независим уебсайт (често показващ съобщение за грешка) или може да бъде някой от другите уебсайтове на уеб сървъра в зависимост от предпочитанията на администратора на уеб сървъра..


    Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.