Hallo Christoph,
immerhin habe ich ja auch nicht etwa
eine Direktive wie
NameVirtualHost _default_
Warum nicht?
Wenn ich das wüsste, gäb es wohl dieses Thread nicht ;o)
Hast du so etwas wenigstens mal probiert?
Selbstverständlich. Fehler:
[Fri Dec 17 22:06:11 2004] [warn] NameVirtualHost _default_:80 has no VirtualHosts .
sowie natürlich wieder
[Fri Dec 17 22:06:11 2004] [error] VirtualHost _default_:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results .
Was passiert da? Was sagen deine logs zu so einem Versuch?
Quasi das gleiche wie vorher auch :|
du kannst IP-basierte und namensbasierte virtuelle hosts nicht einfach so durcheinanderwürfeln.
definiere(durcheinanderwürfeln);
Du hast mit "NameVirtualHost" _eine_ IP definert, die für alle darunterstehenden <VirtualHost>-Container gültig sein soll. Aber du schreibst einen Container darunter, der eben _nicht_ für die angegebene IP gilt.
ach so ist das mit "NameVirtualHost"! :o)
Was dann aber unlogisch ist: Wieso muss die IP nochmal im entsprechenden Virtualhost-Container angegeben werden?
So, jetzt habe ich es entsprechend umgestellt mal ausprobiert. Ist aber genau das gleiche.
Hm. Hast du dir schon mal überlegt, was "__default__" für eine IP ist?
beispielsweise 127.0.0.1? eigentlich brauche ich _default_ gar nicht,
aber falls dann doch irgendwann mal wieder irgendwas streikt und der
Computer sich seine IP mittels DHCP holt, dann wär's halt ganz nett,
wenn das ganze auch so funktionieren würde.
Naja, wenn's halt nicht klappt, dann lass ich den _default_-Server
eben weg und fertig :)
Apropos, kann man eigentlich einen einzelnen Virtuellen Host mehrmals
in einer entsprechenden Direktive erwähnen?
Prinzipiell ja - aber ich bin nicht sicher, ob ich diese Nachfrage richtig verstehe.
hm, irgendwie ist dieser Satz auch etwas blöd geschrieben. Ich meinte
eigentlich, ob
<VirtualHost x>
ServerName bla
Allow from xyz
</VirtualHost>
#...
<VirtualHost x>
DocumentRoot bla
Deny from abc
</VirtualHost>
das gleiche wie
<VirtualHost x>
ServerName bla
Allow from xyz
DocumentRoot bla
Denny from abc
</VirtualHost>
ergibt.
Damit könnte ich zumindest
die virtuellen Hosts in einer "plattformunabhängigen" Konfigurationsdatei zusammenfassen. Also z.B. sowas:
<VirtualHost ...>
ServerName vwx
# und weitere plattformunabhängige direktiven
</VirtualHost>
und an anderer Stelle - in diesem Falle für Linux:
<VirtualHost ...>
ServerName vwx
DocumentRoot /var/www/webserver/abc/def/ghi
</VirtualHost>
Auch das verstehe ich nicht so _ganz_. Das würde bedeuten, daß deine httpd.conf bzw. die dafür nötigen Files auf einer Partition liegen, die unabhängig vom gerade gefahrenen Betriebssystem ansprechbar ist.
Was z.b. möglich ist, in dem man die Dinger einfach in den DocumentRoot packt, der ja auch für beide OS erreichbar ist (damit es auf beiden laufen kann), ich nutze dazu schlicht und einfach Fat32, was ohne Probleme funktioniert.
_Das_ läßt sich zwar noch machen. Aber eine Abfrage nach dem Schema
if (Windows){
nimm windowshttpd.conf
} else {
nimm linuxhttpd.conf
}
ist mir nicht vorstellbar.
Hm, mit <If ...> kann man vielleicht auch Umgebungsvariablen überprüfen und dann einbinden, aber das ist imho auch gar nicht möglich. Jeder apache auf seinem OS bekommt erst mal eine "Basis-httpd.conf" zugewiesen, wo seine spezifischen Daten stehen (z.B. sowas wie User & Group unter Linux, was Win ja nicht braucht/will/hat ;). Dann werden ganz einfach die weiteren Config-Files von dieser Fat-Partition dort geladen, d.h. jeweils eine Config-File, die beide Apachen nutzen (die nenne ich ja so nett "plattformunabhängig") und dann halt die Plattformspezifische. Dann steht in der Linux-httpd.conf halt
Include /var/www/webserver/server/apache/conf/linux.conf
(bzw. eigentlich eher /etc/apache2/conf/webserver/linux.conf)
und beim Windows
Include "E:/Homepages/webserver/server/apache/conf/win.conf"
oder sowas in der Art.
Du kannst an vielen Stellen in den Containern der httpd.conf RegExpressions einsetzen, aber daß eine "Plattformunabhängigkeit" sich so erreichen läßt, wie du das andeutest, halte ich derzeit zumindest für unmöglich - und auch nicht für sinnvoll.
ja, zuerst habe ich versucht, die Verzeichnisse mit <Location>-Containern anzugeben, um kein regex nutzen zu müssen, aber dann hielt ich es doch für sinnvoller, das ganze zu trennen und mit <Directory>'s zu machen, da dies zum einen deutlich sicherer ist, und zum anderen die <Location>-angaben Case-sensitive sind, was unter Windows ja nicht so optimal ist (wenn z.b. da steht
<Location /server/apache>
Deny from all
</Location>
und man beim Win-Apache dann einfach http://.../server/Apache angibt, hat man den Passwortschutz schnell umgangen).
Grüße,
Sven