1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
|
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
<!-- English Revision: 103425 -->
<!--
Copyright 2003-2004 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manualpage metafile="name-based.xml.meta">
<parentdocument href="./">Virtual Hosts</parentdocument>
<title>Unterstützung namensbasierter virtueller Hosts</title>
<summary>
<p>Das Dokument beschreibt, wann und wie namensbasierte virtuelle Hosts zu
verwenden sind.</p>
</summary>
<seealso><a href="ip-based.html">Unterstützung IP-basierter virtueller
Hosts</a></seealso>
<seealso><a href="details.html">Tiefergehende Erörterung der Zuweisung
virtueller Hosts</a></seealso>
<seealso><a href="mass.html">Dynamisch konfiguriertes
Massen-Virtual-Hosting</a></seealso>
<seealso><a href="examples.html">Beispiele für virtuelle Hosts in typischen
Installationen</a></seealso>
<seealso><a href="examples.html#serverpath"
>ServerPath-Beispielkonfiguration</a></seealso>
<section id="namevip"><title>Namensbasierte gegenüber IP-basierten
virtuellen Hosts</title>
<p>IP-basierte virtuelle Hosts verwenden die IP-Adresse der Verbindung, um den
korrekten virtuellen Host zur Bedienung einer Anfrage zu ermitteln. Folglich
benötigen Sie eine IP-Adresse für jeden virtuellen Host. Bei der
Verwendung von namensbasierten virtuellen Hosts verläßt sich der
Server darauf, dass der Client den Hostnamen als Bestandteil der HTTP-Header
angibt. Durch Anwendung dieser Technik können sich mehrere verschiedene
Hosts die gleiche IP-Adresse teilen.</p>
<p>Die Verwendung von namensbasierten virtuellen Hosts ist gewöhnlich
einfacher. Sie müssen lediglich Ihren DNS-Server darauf einstellen,
jeden Hostnamen auf die richtige IP-Adresse abzubilden, und dann den Apache
HTTP Server so konfigurieren, dass er die verschiedenen Hostnamen erkennt.
Namensbasierte virtuelle Hosts entschärfen auch den Bedarf an
knappen IP-Adressen. Daher sollten Sie namensbasierte virtuelle Hosts
verwenden, sofern kein besonderer Grund dafür existiert, IP-basierte
virtuelle Hosts zu wählen. Mögliche Gründe für die
Verwendung IP-basierter virtueller Hosts sind:</p>
<ul>
<li>Einige antike Clients sind nicht kompatibel zu namensbasierten
virtuellen Hosts. Damit namensbasierte virtuelle Hosts funktionieren,
muss der Client den HTTP-Host-Header senden. Dies ist bei HTTP/1.1
vorgeschrieben und in allen modernen HTTP/1.0-Browsern als Erweiterung
implementiert. Wenn Sie Unterstützung für veraltete Clients
benötigen und dennoch namensbasierte virtuelle Hosts verwenden,
dann finden Sie eine mögliche Lösung dafür am Ende des
Dokuments.</li>
<li>Namensbasierte virtuelle Hosts können aufgrund der Natur des
SSL-Protokolls nicht mit SSL-gesicherten Servern verwendet werden.</li>
<li>Einige Betriebssysteme und Netzwerkanlagen setzen Techniken zum
Bandbreiten-Management ein, die nicht zwischen Hosts unterscheiden
können, wenn diese nicht auf verschiedenen IP-Adressen liegen.</li>
</ul>
</section>
<section id="using"><title>Die Verwendung von namensbasierten virtuellen Hosts</title>
<related>
<modulelist>
<module>core</module>
</modulelist>
<directivelist>
<directive module="core">DocumentRoot</directive>
<directive module="core">NameVirtualHost</directive>
<directive module="core">ServerAlias</directive>
<directive module="core">ServerName</directive>
<directive module="core">ServerPath</directive>
<directive module="core" type="section">VirtualHost</directive>
</directivelist>
</related>
<p>Um namensbasierte virtuelle Hosts zu verwenden, müssen Sie die
IP-Adresse (und möglicherweise den Port) des Servers benennen, an
der Anfragen für die Hosts entgegengenommen werden. Dies wird mit
der Direktive <directive module="core">NameVirtualHost</directive>
eingestellt. Im Normalfall, wenn alle IP-Adressen des Server verwendet
werden sollen, können Sie <code>*</code> als Argument für
<directive module="core">NameVirtualHost</directive> verwenden. Wenn Sie
vorhaben, mehrere Ports zu nutzen (etwa wenn SSL läuft), sollten
Sie dem Argument einen Port hinzufügen, wie zum Beispiel
<code>*:80</code>. Beachten Sie,
dass die Angabe einer IP-Adresse in einer <directive
module="core">NameVirtualHost</directive>-Anweisung den Server nicht
automatisch an dieser Adresse lauschen läßt. Lesen Sie bitte "<a
href="../bind.html">Bestimmen der vom Apache verwendeten Adressen und
Ports</a>" für weitere Details. Zusätzlich muss jede hier
angegebene IP-Adresse einer Netzwerkkarte des Servers zugeordnet sein.</p>
<p>Der nächste Schritt ist die Erstellung eines <directive type="section"
module="core">VirtualHost</directive>-Blocks für jeden einzelnen
Host, den Sie bedienen wollen. Das Argument der Direktive <directive
type="section" module="core">VirtualHost</directive> sollte das gleiche
sein wie das Argument der <directive
module="core">NameVirtualHost</directive>-Anweisung (d.h. eine IP-Adresse
oder <code>*</code> für alle Adressen). Innerhalb jedes <directive
type="section" module="core">VirtualHost</directive>-Blocks benötigen
Sie zumindestens eine <directive
module="core">ServerName</directive>-Anweisung, um zu bestimmen, welcher
Host bedient wird, und eine <directive
module="core">DocumentRoot</directive>-Anweisung, um anzugeben, wo im
Dateisystem der Inhalt des Hosts abgelegt ist.</p>
<note><title>Der Hauptserver verschwindet</title>
Wenn Sie virtuelle Hosts zu einem bestehenden Webserver hinzufügen,
müssen Sie auch einen <directive type="section"
module="core">VirtualHost</directive>-Block für den bestehenden Host
<transnote>und bisherigen Hauptserver</transnote> erstellen.
Die <directive module="core">ServerName</directive>- und
<directive module="core">DocumentRoot</directive>-Anweisungen zu diesem
virtuellen Host sollten die gleichen sein wie die globalen <directive
module="core">ServerName</directive>- und <directive
module="core">DocumentRoot</directive>-Anweisungen. Führen Sie diesen
virtuellen Host als erstes in der Konfigurationsdatei auf, so dass er als
Standard-Host fungiert.
</note>
<p>Vorausgesetzt, Sie bedienen z.B. die Domain
<code>www.domain.tld</code> und möchten den virtuellen Host
<code>www.otherdomain.tld</code> hinzufügen, welcher auf
die gleiche IP-Adresse zeigt. Dann fügen Sie einfach Folgendes der
<code>httpd.conf</code> hinzu:</p>
<example>
NameVirtualHost *:80<br />
<br />
<VirtualHost *:80><br />
<indent>
ServerName www.domain.tld<br />
ServerAlias domain.tld *.domain.tld<br />
DocumentRoot /www/domain<br />
</indent>
</VirtualHost><br />
<br />
<VirtualHost *:80><br />
<indent>ServerName www.otherdomain.tld<br />
DocumentRoot /www/otherdomain<br />
</indent>
</VirtualHost><br />
</example>
<p>Sie können anstelle des <code>*</code> bei den beiden Anweisungen
<directive module="core">NameVirtualHost</directive> und <directive
type="section" module="core">VirtualHost</directive> alternativ eine
eindeutige IP-Adresse angeben. Das kann man beispielsweise machen, um
einige namensbasierte virtuelle Hosts auf einer IP-Adresse zu betreiben und
entweder IP-basierte oder ein anderes Set von namensbasierten virtuellen
Hosts auf einer anderen Adresse.</p>
<p>Viele Server wollen unter mehr als einem Namen erreichbar sein. Die
Direktive <directive module="core">ServerAlias</directive>, die innerhalb
des <directive type="section"
module="core">VirtualHost</directive>-Abschnittes angegeben wird,
ermöglicht dies. Zum Beispiel zeigt die <directive
module="core">ServerAlias</directive>-Anweisung in dem ersten <directive
type="section" module="core">VirtualHost</directive>-Block oben an, dass die
aufgeführten Namen alternative Namen sind, die man verwenden kann, um
das gleiche Webangebot zu erreichen:</p>
<example>
ServerAlias domain.tld *.domain.tld
</example>
<p>Anfragen für alle Hosts der Domain <code>domain.tld</code> werden
von dem virtuellen Host <code>www.domain.tld</code> bedient. Die
Platzhalter <code>*</code> und <code>?</code> können anstelle
entsprechender Namen verwendet werden. Natürlich können Sie nicht
einfach Namen erfinden und diese bei <directive
module="core">ServerName</directive> oder <code>ServerAlias</code>
angeben, Sie müssen zunächst Ihren DNS Server entsprechend
konfigurieren, dass er diese Namen auf die mit Ihrem Server verknüpfte
IP-Adresse abbildet.</p>
<p>Und schlußendlich können Sie die Konfiguration der virtuellen
Hosts mittels Angabe weiterer Direktiven innherhalb der <directive
type="section" module="core">VirtualHost</directive>-Container
feineinstellen. Die meisten Direktiven können in diesen Containern
angegeben werden und verändern dann ausschließlich die
Konfiguration des entsprechenden virtuellen Hosts. Prüfen Sie den <a
href="../mod/directive-dict.html#Context">Kontext</a> einer Direktive, um
herauszufinden, ob eine bestimmte Direktive zulässig ist.
Im <em>Hauptserver-Kontext</em> (außerhalb der <directive
type="section" module="core">VirtualHost</directive>-Container) definierte
Konfigurationsanweisungen werden nur dann angewendet, wenn sie nicht durch
Einstellungen des virtuellen Hosts außer Kraft gesetzt wurden.</p>
<p>Wenn nun eine Anfrage eintrifft, prüft der Server zuerst, ob sie eine
IP-Adresse verwendet, die der <directive
module="core">NameVirtualHost</directive>-Anweisung entspricht. Ist dies der
Fall, dann sieht er sich jeden <directive type="section"
module="core">VirtualHost</directive>-Abschnitt mit einer passenden
IP-Adresse an und versucht den einen zu finden, dessen <directive
module="core">ServerName</directive>- oder <directive
module="core">ServerAlias</directive>-Anweisung mit dem gewünschten
Hostnamen übereinstimmt. Findet er einen, dann verwendet er die
Konfiguration dieses Servers. Wird kein passender virtueller Host gefunden,
dann wird <strong>der erste angegeben virtuelle Host</strong> verwendet,
dessen IP-Adresse paßt.</p>
<p>Die Folge davon ist, dass der erste aufgeführte virtuelle Host der
<em>Standard</em>-Virtual-Host ist. Die <directive
module="core">DocumentRoot</directive>-Anweisung des <em>Hauptservers</em>
wird <strong>niemals</strong> verwendet, wenn eine IP-Adresse mit einer
<directive module="core">NameVirtualHost</directive>-Anweisung
übereinstimmt. Wenn Sie eine spezielle Konfiguration für Anfragen
angeben möchten, die keinem bestimmten virtuellen Host entsprechen,
packen Sie diese Konfiguration einfach in einen <directive type="section"
module="core">VirtualHost</directive>-Container und führen diesen als
erstes in der Konfigurationsdatei auf.</p>
</section>
<section id="compat"><title>Kompatibilität mit älteren Browsern</title>
<p>Wie zuvor erwähnt gibt es einige Clients, die nicht die notwendigen
Daten senden, mit denen namensbasierte virtuelle Hosts korrekt
funktionieren. Diesen Clients werden stets die Seiten des ersten, für
diese IP-Adresse aufgeführten virtuellen Hosts gesendet werden (des
<cite>primären</cite> namensbasierten virtuellen Hosts).</p>
<note><title>Was bedeutet älter?</title>
<p>Beachten Sie bitte, wenn wir von älter sprechen, meinen wir auch
älter. Es ist sehr unwahrscheinlich, dass sie einen dieser Browser
heutzutage in Verwendung finden werden. Alle aktuellen Browser-Versionen
senden den <code>Host</code>-Header, so wie er für namensbasierte
virtuelle Hosts benäötigt wird.</p>
</note>
<p>Mit der Direktive <directive module="core">ServerPath</directive> existiert
eine mögliche Behelfskonstruktion, obgleich sie etwas schwerfällig
ist:</p>
<p>Beispielkonfiguration:</p>
<example>
NameVirtualHost 111.22.33.44<br />
<br />
<VirtualHost 111.22.33.44><br />
<indent>
ServerName www.domain.tld<br />
ServerPath /domain<br />
DocumentRoot /web/domain<br />
</indent>
</VirtualHost><br />
</example>
<p>Was bedeutet das? Es bedeutet, dass eine Anfrage für eine mit
"<code>/domain</code>" beginnende URI von dem virtuellen Host
<code>www.domain.tld</code> bedient wird. Dies heißt, dass die Seiten
für alle Clients unter <code>http://www.domain.tld/domain/</code>
abrufbar sind, wenngleich Clients, die den Header <code>Host:</code>
senden, auch über <code>http://www.domain.tld/</code> auf sie zugreifen
können.</p>
<p>Legen Sie einen Link auf der Seite Ihres primären virtuellen Hosts zu
<code>http://www.domain.tld/domain/</code>, um die Behelfslösung
verfügbar zu machen. Bei den Seiten der virtuellen Hosts müssen
Sie dann sicherstellen, entweder außschließlich relative Links
(<em>z.B.</em> "<code>file.html</code>" oder
"<code>../icons/image.gif</code>") zu verwenden oder Links, die das
einleitende <code>/domain/</code> enthalten (<em>z.B.</em>,
"<code>http://www.domain.tld/domain/misc/file.html</code>" oder
"<code>/domain/misc/file.html</code>").</p>
<p>Dies erfordert etwas Disziplin, die Befolgung dieser Richtlinien stellt
jedoch größtenteils sicher, dass Ihre Seiten mit allen Browsern
funktionieren, alten wie neuen.</p>
</section>
</manualpage>
|