
Я прошу всех помочь мне понять основы.
Предположим, что на одном сервере есть два домена 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
решение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: Ваше доменное имя.
Если вы хотите добавить второй веб-сайт, вы можете добавить их так же, как это. Вы можете следовать подробному руководству здесьздесь
Надеюсь это поможет.