Як у вас одна IP-адреса та багато веб-сайтів?


27

Як я можу це мати там, де у мене є одна IP-адреса, яка сидить в Інтернеті, але багато веб-імен? Наприклад, коли хостинг-компанія має спільний IP, але я отримую необмежену кількість доменних імен (разом із усіма іншими в цьому вікні).

У мене є вікно в Інтернеті, але я хочу вказати на іншу машину, на якій розміщений інший веб-сайт, коли хтось друкує в іншому веб-сайті ... (він сидить прямо біля нього, просто в іншому полі). Це все піддомен? Дякую.

Я приймаюча компанія

Відповіді:


36

Це частина протоколу HTTP 1.1.

Зокрема, протокол HTTP 1.1 містить заголовок під назвою "хост:", який вказує, до якого веб-сайту на певному сервері клієнт намагається отримати доступ.

Отже, якщо snoopy.net і woodstock.org обидва діляться 192.0.32.10, а ваш браузер намагається отримати вміст із http://snoopy.net/doghouse конкретного запиту http:

GET /doghouse HTTP/1.1
Host: snoopy.net

Якщо потрібна URL-адреса, http://woodstock.org/seedsзапит виглядатиме так

GET /seeds HTTP/1.1
Host: woodstock.org

В обох випадках між комп'ютером та портом 80 сервера був би роз'єм tcp. Сервер міг би отримати вміст від /var/www/snoopy.net або /var/www/woodstock.org/ на основі заголовка хосту.

Були б інші заголовки файлів cookie та інших матеріалів, таких як тип браузера та дозволений вміст, але саме заголовок "Хост" - це те, що дозволяє веб-серверу знати, який віртуальний веб-сайт бажаний.

У RFC2616 є більше .

Тому також, що на https-сайтах * має бути своя IP-адреса - обмін ключами і перевірка сертифікатів ssl відбувається до транзакції http, тож http-сервер не дізнається видавати сертифікат на "woodstock. org "або" snoopy.net ", коли він отримує з'єднання https на порт 443 192.0.32.10.


редагувати

** у коментарях Grawity зазначає, що в специфікації TLS є розширення на SSL, які дозволяють серверу знати, який веб-сайт користувач намагається отримати доступ, і що більшість сучасних веб-браузерів мають ці розширення, тому це теж має бути трохи сильний.


тож веб-сервер побачить цей заголовок і перемістить його на правильний веб-сайт? Чи можете ви мати кілька веб-сайтів на одному і тому ж порту?
Johnny

1
Саме це і є. Один "сервер", такий як apache, має порт 80 192.0.32.10, який містить багато записів DNS, кожен з яких є "сайтом". Сервер знає, на чому базується потрібний сайт на основі заголовка "хост".
chris

3
DNS налаштований так, щоб обидва імена вказували на одну і ту ж IP-адресу, де сервер слухає. Сервер отримує з'єднання на одному IP-порті та порту, але потім, коли браузер каже йому "Я хочу SiteA.com", він знає, що йому потрібно видавати інший контент, ніж коли його запитують для SiteB.com.
Массімо

2
Щоб бути ще більш зрозумілим: два сайти розрізняють на рівні протоколу HTTP, а не на рівні TCP / IP. Це як коли хтось телефонує у ваш офіс і просить поспілкуватися з Джоном чи Сьюзан: номер телефону однаковий, але ним може скористатися більше однієї людини.
Массімо

1
Більшість веб-браузерів і серверів зараз підтримують вказівку імені сервера TLS, яка знімає вимогу однієї IP-адреси на веб-сайті.
grawity

12

Існує щось, що надсилає весь сучасний браузер разом із запитом, що називається заголовком "Хост:".

Фактичний запит, який Firefox надсилає на цю сторінку:

Ведучий: superuser.com
Користувач-агент: 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)
Прийняти: текст / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8
Accept-Language: en-us, en; q = 0,5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Тримайте живу: 300
З'єднання: продовжуйте жити

Як бачите,

Ведучий: superuser.com
біт ідентифікує відповідний веб-сайт.

У IIS та Apache ви можете налаштувати віртуальні веб-сайти, які приймають лише запити з певної комбінації IP / хост.

Що стосується конкретного питання, вам доведеться ознайомитись із тим, як ваша конкретна компанія, що займає хостинг, хоче, щоб ви запросили конфігурацію.


Слід також зазначити, що вам потрібно встановити кілька записів DNS для вашої IP-адреси.
Тадеуш А. Кадлубовський

@ Тадеуш: Можна налаштувати записи DNS-підстановки, тому це не обов'язково.
Джон Гітцен

6

Методика розміщення більше одного домену / субдомену на одній IP-адресі / хості називається віртуальними хостами . Запит http get містить доменне ім'я, для якого запити дозволяють веб-серверу співставити запит із певним віртуальним доменом.

Якщо у вас внутрішньо декілька фізичних хостів із лише одним зовнішнім IP-адресою, ви хочете вивчити налаштування зворотного проксі-сервера для переадресації запитів на правильну машину / внутрішню IP-адресу.


або, звичайно, ви також могли б отримати інші http-сервери на різних портах.
Chopper3

Так, це теж варіант. Але люди звикли вказувати порт під час введення URL-адреси, тому я б зарезервував це рішення для кількох ситуацій, таких як інтерфейс адміністратора.
3вплив

3

Функція вашого веб-сервера зазвичай називається "віртуальними хостами". Після того, як ви вкажете записи dns, щоб вказати на одну IP-адресу (як зазначено в інших відповідях), сервер буде сервер різних сайтів залежно від того, що запитується хост.

Що стосується вказівки на інший ящик. Ви можете налаштувати переадресацію на більшості веб-серверів, якщо сподіваєтесь отримати запит спочатку. Якщо ви говорите про субдомени, то все, що вам потрібно зробити - це вказати кожен з піддоменів на іншу ip адресу.

тобто host.com -> IP 1, то www.host.com -> IP 2 та mail.host.com -> IP 3

Якщо ви хочете отримати більш конкретні відповіді, вам потрібно сказати, яке програмне забезпечення веб-сервера в якій операційній системі ви працюєте.

Можливо, ви знайдете, що ServeFault є кращим місцем для цього питання.


1

Коротко...

Перший - Встановіть записи DNS для різних доменів, щоб усі вказували на ваш ящик.

Два - Як описано іншими, налаштуйте веб-сервер (ви не говорите, який саме), щоб він відповідав запитуваному імені хоста.

Таким чином, всі запити для всіх ваших доменів переходять на одну машину, і він конфігурує потрібний домен і спрямовує його в потрібну папку, що містить вміст цього сайту.


0

З вашого запитання мені здається, що у вас є окремий фізичний сервер для другого веб-сайту. У цьому випадку ви не зможете використовувати одну IP-адресу для двох серверів. Ви можете: а) отримати другу загальнодоступну IP-адресу для свого другого хоста, або b) створити розумний проксі-сервер, який пересилає запити на різні сервери у вашій внутрішній мережі на основі заголовків хоста. Я впевнений, що б) це можливо, але я не маю реального уявлення про те, як це працює, тому вам доведеться запитати когось іншого, чи це ви намагаєтеся зробити.


0

Якщо я правильно читаю ваше запитання, у вас є два різних комп'ютери, які ділять IP-адресу через NAT (Network Address Translation)? Якщо це так, вам доведеться прослуховувати один сайт на іншому порті (не 80) - я не знаю хорошого способу, щоб маршрутизатор надсилав запити на різні комп'ютери на основі метаданих HTTP "Host". Вам краще просто отримати другу IP-адресу для свого другого сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.