Warum virtuelle Hosts funktionieren:
Mit der HTTP-Version 1.0 waren keine virtuellen Hosts möglich. Ab der Version 1.1 allerdings schon. Das ist bei allen modernen Browsern integriert. Beim Verbindungsaufbau übergibt der Browser den angefragten Host (bspw. brainworld.lpic) an den HTTPd. Bei unserer Simulation (blauer Bereich) mit netcat (nc) geschieht das mit der Zeile "HOST: www3.brainworld.lpic". Der HTTPd stellt dann aber, obwohl wir www3 angefragt haben, nur den Default-vHost bereit, weil HTTP1.0 den Befehl HOST: nicht unterstützt.
Testen kann man das mit folgenden Zeilen. Zunächst mit HTTP1. Wir bekommen als Antwort die Default-Seite ("dummy") angezeigt.:
[root@dmzwww]# nc www3.brainworld.lpic 80
GET / HTTP/1.0
HOST: www3.brainworld.lpic
HTTP/1.1 200 OK
Date: Wed, 28 Sep 2016 07:38:09 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Tue, 27 Sep 2016 13:41:34 GMT
ETag: "ae-53d7d67221594"
Accept-Ranges: bytes
Content-Length: 174
Connection: close
Content-Type: text/html
<html>
<body>
<center>
<img src="adler.jpg" alt="eine grafik">
<br>
This is the host: dummy.brainworld.lpic
<br>
<h1> Natuerlich funktioniert das! </h1>
</center>
</body>
</html>
[root@dmzwww]# nc www3.brainworld.lpic 80
GET / HTTP/1.1
HOST: www3.brainworld.lpic
HTTP/1.1 200 OK
Date: Wed, 28 Sep 2016 07:38:09 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Tue, 27 Sep 2016 13:31:47 GMT
ETag: "ae-53d7d67221594"
Accept-Ranges: bytes
Content-Length: 174
Connection: close
Content-Type: text/html
<html>
<body>
<center>
<img src="adler.jpg" alt="eine grafik">
<br>
This is the host: www3.brainworld.lpic
<br>
<h1> Natuerlich funktioniert das! </h1>
</center>
</body>
</html>
Wie richtet man einen vHost ein?
Include conf/vhosts.conf
#
# Dummy Website als Fallback. Sie wird NICHT im Nameserver eingetragen!
#
<VirtualHost *:80>
DocumentRoot "/opt/apache2423/vhosts/dummy"
ServerName dummy.brainworld.lpic
<Directory "/opt/apache2423/vhosts/dummy">
Options Indexes
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
#
# www.brainworld.lpic - Im Nameserver eintragen!
#
<VirtualHost *:80>
DocumentRoot "/opt/apache2423/vhosts/www"
ServerName www.brainworld.lpic
<Directory "/opt/apache2423/vhosts/www">
Options Indexes
AllowOverride None
Require all granted
</Directory>
</VirtualHost>#---- weitere vHosts definieren nach Bedarf.
# forum.brainworld.lpic - Im Nameserver eintragen!
#
<VirtualHost *:80>
DocumentRoot "/opt/apache2423/vhosts/forum"
ServerName forum.brainworld.lpic
<Directory "/opt/apache2423/vhosts/forum">
Options Indexes
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Grundsätzlich: Jeder "Container" (vHost) beginnt mit einem <VirtualHost> und beendet wird er mit </VirtualHost>. Alles, was dazwischen steht ist Bestandteil des vHosts.
Natürlich müssen die Ordner "vhosts/", "forum/" und "www/" noch angelegt und Inhalte hinterlegt werden. Der bislang laufende Host, der in der httpd.conf definiert ist, wird automatisch deaktiviert. Das geschieht ganz von selbst, wenn man die vHosts angelgt hat. Ein Restart des HTTPd ist natürlich nötig.