
Ich bitte alle, mir zu helfen, die Grundlagen zu verstehen.
Angenommen, ein Server hat zwei Domänen: aa.com und bb.com. Wie erkennt Apache, welcher Inhalt bereitgestellt werden soll?
In access.log gibt es keinen Domäneneintrag. Wie gelangte die Anfrage dann zum Virtualhost-Eintrag?
Antwort1
Eine HTTP-Anfrage enthält ein Header-Feld namens , Host
das den Namen des virtuellen Hosts enthält, der antworten soll. Apache liest dies und ordnet die Anfrage dem entsprechenden virtuellen Host zu.
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol, insbesondere die Host:
Kopfzeile ...
Antwort2
Das ist ganz einfach: Angenommen, jemand gibt aa.com in die Adressleiste seines Browsers ein. Der Browser startet dann eine DNS-Suche nach aa.com, um herauszufinden, mit welcher IP-Adresse kommuniziert werden soll. Nehmen wir zum Beispiel an, DNS antwortet 8.8.8.8
Der Browser stellt dann eine Verbindung zu 8.8.8.8 auf Port 80 her und sendet eine GET-Anfrage und zusätzliche HTTP-Headerfelder. Eines dieser HTTP-Headerfelder ist „HOST“. Seit HTTP 1.1 ist dies ein unverzichtbarer Teil des Headers. Es enthält den ursprünglichen Domänennamen, den Ihr Benutzer in seinem Browser eingegeben hat (aa.com).
Ihr Apache-Server nimmt den HOST-Header und versucht, dafür einen „benannten virtuellen Host“ zu finden. Wenn es einen VirtualHost für aa.com gibt, liefert er den Inhalt oder führt aus, was auch immer Sie für diesen virtuellen Host konfiguriert haben. Wenn er keinen VirtualHost für die angeforderte Domäne findet, liefert er seinen Standard (wiederum abhängig von Ihrer Konfiguration).
Ich hoffe, das war klar und hilfreich.
Mehr dazu erfahren Sie hier:
W3 HTTP-Header-Felddefinitionen
Antwort3
Der Domänenname wird über die Datei htttp.conf mit dem Website-Verzeichnis verknüpft. Wenn Sie einen CentOS-Server verwenden, befindet sich die Conf-Datei unter /etc/httpd/httpd.conf.
Ich verfüge nicht über die nötige Sachkenntnis, um Sie auf anderen Betriebssystemen zur httpd.conf-Datei zu führen. Aber ich denke, das können Sie leicht herausfinden.
Sehen Sie sich diese Zeilen in httpd.conf an.
<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: Hier sollten Sie das Website-Verzeichnis angeben. ServerName: Ihr Domänenname.
Wenn Sie eine zweite Website hinzufügen möchten, können Sie diese einfach so hinzufügen. Eine ausführliche Anleitung finden Sie hierHier
Hoffe das hilft.