PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache VirtualHost Logikfehler



wOu
01.01.09, 19:15
Hi!

Ich bitte euch, mir zu Helfen, weil ich schon alle Varianten durchprobiert habe und einfach nicht auf das Richtige komme :ugly:

VirtualHosts:
domain1.com -> /var/www
domain2.com:443 -> /var/www2

Hätte ich so konfiguriert:

<VirtualHost *>
DocumentRoot /var/www
ServerName domain1.com
<Directory "/var/www">
allow from all
Options +Indexes
</Directory>
ServerAlias 192.168.0.1
</VirtualHost>

<VirtualHost domain2.com:443>
DocumentRoot "/var/www2"
ServerName domain2.com
<Directory "/var/www2">
allow from all
Options +Indexes
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domain2.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain2.key
</VirtualHost>

Funktioniert auch so weit ...
Wenn ich http://domain1.com eingebe komme, ich auf "/var/www"
Wenn ich http://192.168.0.1 (VPN) eingebe, komme ich auf "/var/www"
Wenn ich https://domain2.com eingebe, komme ich verschlüsselt auf "/var/www2"

Aber wieso, wenn ich ich https://domain1.com eingebe, komme ich trotzdem verschlüsselt auf "/var/www2", obwohl domain1.com mit /var/www2 garnichts zu tun hat? :confused:

lkwg82
01.01.09, 22:30
ich würde oben beim ersten Eintrag noch eine ":80" hinter das Sternchen setzen.

dann noch die globalen Direktiven Listen 80 und Listen 443, damit sollte es gehen.

Roger Wilco
01.01.09, 22:31
Weil namensbasierte VirtualHosts mit SSL nicht ohne weiteres möglich sind. Lies dazu http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#vhosts.



ServerAlias 192.168.0.1
Diesen Eintrag kannst du dir sparen. Der ist semantisch falsch.

wOu
01.01.09, 22:48
Hi, danke für die Antworten


ich würde oben beim ersten Eintrag noch eine ":80" hinter das Sternchen setzen.

dann noch die globalen Direktiven Listen 80 und Listen 443, damit sollte es gehen.
80 hinter dem Stern habe ich vorher schon versucht, ändert aber garnichts.

Ports habe ich auch schon eingetragen.

# Include ports listing
Include /etc/apache2/ports.conf
ports.conf:

Listen *:80
Listen *:443

wOu
01.01.09, 22:54
Hmmm ... das heißt ich brauch eine zusätzliche IP?
Nicht funktionieren ist eigentlich übertrieben, denn es funktioniert ja größtenteils ...

Wenn beide virtuellen Server HTTP-Server währen, und ich will dass der erste angesprochen wird, dann brauch ich die ServerAlias aber schon ... (oder?)

Roger Wilco
02.01.09, 00:19
Hmmm ... das heißt ich brauch eine zusätzliche IP?
Wenn du beide Domains über HTTPS anbieten willst: Ja.


Wenn beide virtuellen Server HTTP-Server währen, und ich will dass der erste angesprochen wird, dann brauch ich die ServerAlias aber schon ... (oder?)
Nicht den mit der IP-Adresse, denn das ist semantisch falsch. Lies dazu die Dokumentation zur ServerAlias-Direktive.

wOu
02.01.09, 00:45
Nein will ich nicht, nur domain1.com soll SSL haben - habe ich aber geschrieben

domain1.com -> /var/www
domain2.com:443 -> /var/www2
Es funktioniert ja eigentlich alles, aber ich will verhindern, wenn jemand https://domain1.com eingibt auf /var/www2 kommt, obwohl der garnichts damit zu tun hat!

Ok, werde ich lesen, obwohl es vorhin nur funktioniert hatte, wenn ich die IP als Alias reinschreibe, damit er angesprochen wird ...
Sonst könnte es ja genausogut der Zweite sein?:confused:

LG, wOu

wOu
03.01.09, 02:29
Ok ich habs jetzt nochmal auf komplette Basics gestellt:


<VirtualHost domain1.com:*>
DocumentRoot "/var/www"
#NameVirtualHost domain1
ServerName domain1.com
<Directory "/var/www">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost domain2.com:*>
DocumentRoot "/var/www2"
#NameVirtualHost domain2
ServerName domain2.com
<Directory "/var/www2">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

Dann schreibt er mir:

root@server:~# apache2ctl restart
[Sat Jan 03 02:23:13 2009] [warn] VirtualHost domain1.com:0 overlaps with Virtu alHost domain2.com:0, the first has precedence, perhaps you need a NameVirtual Host directive
Und wenn ich http://domain2.com eingebe, lande ich auf /var/www (von domain1) ... :( :confused:


So, dann entkommentiere ich das #NameVirtualHost bei beiden, folgendes passiert:

root@server:~# apache2ctl restart
[Sat Jan 03 02:26:21 2009] [warn] VirtualHost domain1.com:0 overlaps with VirtualHost domain2.com:0, the first has precedence, perhaps you need a NameVirtualHost directive
[Sat Jan 03 02:26:21 2009] [warn] NameVirtualHost domain1:0 has no VirtualHosts
[Sat Jan 03 02:26:21 2009] [warn] NameVirtualHost domain2:0 has no VirtualHosts
Und das Problem besteht weiter ... also ich denke, es hat nichts mit SSL zu tun, sondern irgendwo ist da ein Logikfehler drinne, wie ich bereits seit Beginn an vermute - bitte um Hilfe!

honkstar
03.01.09, 11:27
Schreib es einfach mal so:


NameVirtualHost *
<VirtualHost domain1.com:*>
DocumentRoot "/var/www"
ServerName domain1.com
<Directory "/var/www">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost domain2.com:*>
DocumentRoot "/var/www2"
ServerName domain2.com
<Directory "/var/www2">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

Das verstehe ich nicht:

Nein will ich nicht, nur domain1.com soll SSL haben - habe ich aber geschrieben
Zitat:
domain1.com -> /var/www
domain2.com:443 -> /var/www2

Irgendwie ist da was verdreht.

Roger Wilco
03.01.09, 12:31
Was soll denn das ':*' im VirtualHost-Tag? Das ist Blödsinn.

Du kannst schlicht nicht verhindern, dass https://domain1.com/ eine Seite ausliefert, wenn domain1.com und domain2.com den gleichen A Resource Record haben ("auf die gleiche IP-Adresse auflösen"). Lies dazu nochmal den von mir genannten Eintrag in der SSL-FAQ vom Apache httpd durch. Für eine "unsaubere" Lösung könntest du auch http://wiki.apache.org/httpd/NameBasedSSLVHosts lesen...

wOu
03.01.09, 13:40
Du kannst schlicht nicht verhindern, dass https://domain1.com/ eine Seite ausliefert, wenn domain1.com und domain2.com den gleichen A Resource Record haben ("auf die gleiche IP-Adresse auflösen").
Achso, na dann habe ich eigentlich eh alles richtig konfiguriert. Aber warum das so ist habe ich nicht wirklich verstanden :confused:



Irgendwie ist da was verdreht.
Ich meine natürlich domain2.com soll SSL haben - und zwar nur die ...



So ist es jetzt:


NameVirtualHost *
<VirtualHost *>
DocumentRoot "/var/www"
ServerName domain1.com
<Directory "/var/www">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost domain2.com:443>
DocumentRoot "/var/www2"
ServerName domain2.com
<Directory "/var/www2">
allow from all
Options +Indexes
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/domain2.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain2.key
</VirtualHost>

Was muss ich jetzt tun, damit ich mit 192.168.0.1 auf /var/www komme?

Roger Wilco
03.01.09, 13:58
<VirtualHost 192.168.0.1:80>
DocumentRoot "/var/www"
# [...]
</VirtualHost>

<VirtualHost 192.168.0.1:443>
DocumentRoot "/var/www2"
# [...]
</VirtualHost>

wOu
03.01.09, 16:02
Ist das nicht ein wenig umständlich? :eek:
Man müsste deshalb ja alle Einstellungen 2x eingeben.

Roger Wilco
03.01.09, 16:12
Nein. Du willst domain1.com nur via HTTP (80/tcp) und domain2.com nur via HTTPS (443/tcp) anbieten. Beide haben die IP-Adresse als A Resource Record. Dann ist das die einfachste Möglichkeit.

wOu
03.01.09, 16:31
Ich meine, dass ich beides 2x mache, nur damit es auch unter der internen IP erreichbar ist

Roger Wilco
03.01.09, 16:43
Syntax für VirtualHost unter http://httpd.apache.org/docs/2.2/mod/core.html#virtualhost anschauen, verstehen und lächeln.

wOu
03.01.09, 17:17
:D

Sie können auch :* angeben, um alle Ports dieser Adresse zu akzeptieren. (Dies wird zusammen mit _default_ empfohlen.)
Dann habe ich das gleich mal gemacht von

<VirtualHost *>
auf

<VirtualHost _default_:*>
gestellt. Zu meiner Verwunderung funktioniert es jetzt :eek: Jedoch verstehe ich den Unterschied immer noch nicht, denn bei "*" hätte er ja auch alles annehmen sollen?! :confused:


Das Zeichen *, welches nur in Kombination mit NameVirtualHost * verwendet wird, um allen IP-Adressen zu entsprechen.
Die Zeichenkette _default_, die nur mit IP-basierten virtuellen Hosts verwendet wird, um nicht zugewiesene IP-Adressen aufzufangen.

Roger Wilco
03.01.09, 17:50
Ich hatte jetzt mehr an folgende Lösung gedacht:

<VirtualHost 192.168.0.1:80 10.0.0.1:80>
# ...
</VirtualHost>

<VirtualHost 192.168.0.1:443 10.0.0.1:443>
SSLEngine on
# ...
</VirtualHost>
Aber wenn deine Variante funktioniert und du glücklich damit wirst, bitte.

wOu
03.01.09, 18:31
Eigentlich schon, ohne error ...

Aber neugierig, wie ich bin habe ich natürlich auch deine Variante ausprobiert:

<VirtualHost 192.168.0.1:80 domain1.com:80>
# ...
</VirtualHost>

<VirtualHost domain2.com:443>
SSLEngine on
# ...
</VirtualHost>
->

root@server:/etc/ssl# apache2ctl restart
[Sat Jan 03 18:24:48 2009] [warn] NameVirtualHost *:0 has no VirtualHosts

LG, wOu

Roger Wilco
03.01.09, 18:36
Die NameVirtualHost-Direktive habe ich absichtlich ausgelassen. Das sind ja keine namensbasierten VirtualHosts mehr...