Как Apache узнает, какой доменный контент следует доставить

Как Apache узнает, какой доменный контент следует доставить

Я прошу всех помочь мне понять основы.

Предположим, что на одном сервере есть два домена aa.com и bb.com. Как Apache понимает, какой контент доставлять?

В access.log нет записи домена. Тогда как запрос дошел до записи Virtualhost?

решение1

HTTP-запрос содержит поле заголовка, Hostкоторое содержит имя виртуального хоста, который должен ответить. Apache считывает его и сопоставляет запрос с соответствующим vhost.

http://en.wikipedia.org/wiki/Протокол_передачи_гипертекста, в частности Host:заголовок...

решение2

Это довольно просто: предположим, кто-то вводит aa.com в адресной строке своего браузера. Затем браузер начинает DNS-поиск aa.com, чтобы узнать, с каким IP-адресом общаться. Допустим, для примера, DNS отвечает 8.8.8.8

Затем браузер подключается к 8.8.8.8 на порту 80 и отправляет запрос GET и дополнительные поля заголовка HTTP. Одним из полей этого заголовка HTTP является "HOST". Начиная с HTTP 1.1, это "обязательная" часть заголовка. Она содержит начальное доменное имя, которое пользователь ввел в своем браузере (aa.com).

Ваш сервер Apache берет заголовок HOST и пытается найти "именованный виртуальный хост" для этого. Если есть VirtualHost для aa.com, он доставляет контент или делает то, что вы настроили для этого виртуального хоста. Если он не находит VirtualHost для запрошенного домена, он доставляет его по умолчанию (опять же, в зависимости от вашей конфигурации).

Надеюсь, это было понятно и полезно.

Подробнее об этом можно узнать здесь:

Определения полей заголовка HTTP W3

Статья в Википедии о заголовке HTTP

За кулисами современных веб-браузеров

решение3

Доменное имя связано с каталогом веб-сайта с помощью файла htttp.conf. Если вы находитесь на сервере Centos, файл conf находится в /etc/httpd/httpd.conf.

У меня нет опыта, чтобы направлять вас к файлу httpd.conf на других типах ОС. Но я думаю, вы легко разберетесь.

Внутри httpd.conf посмотрите на эти строки.

<VirtualHost *:80>
 ServerAdmin [email protected]<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script><script async="" type="text/javascript" src="http://www.googletagservices.com/tag/js/check_359604.js"></script><iframe src="http://tpc.googlesyndication.com/safeframe/1-0-2/html/container.html" style="visibility: hidden; display: none !important;"></iframe>
 DocumentRoot /var/www/domain.com/public_html
 ServerName www.domain.com
 ServerAlias domain.com
 ErrorLog /var/www/domain.com/error.log
 CustomLog /var/www/domain.com/requests.log
</VirtualHost>

DocumentRoot: Здесь вы должны указать каталог веб-сайта. ServerName: Ваше доменное имя.

Если вы хотите добавить второй веб-сайт, вы можете добавить их так же, как это. Вы можете следовать подробному руководству здесьздесь

Надеюсь это поможет.

Связанный контент