« späte Einsicht | Hauptseite | FULL ACK »
08.04.08
Apache, du Arsch II
Die virtuellen Host beim Apache sind teilweise so stark mit dem puren Serverkram verwoben - manche Sachen muss man da echt dreckig zusammenhacken, damit alles zur Zufriedenheit läuft.
Ein klares Beispiel ist der "Hostname". (Fast) jede HTTP-Anfrage liefert eine Host: foobar.de Headerzeile mit, zu der dann ein virtueller Host gefunden werden muss und dann wird der Inhalt ausgeliefert. Das Problem ist aber, dass man wenn man z.B. selber ein Modul baut, das für virtuelle Hosts zuständig ist, bei jedem Request den Hostnamen des Prozesses (request->server->server_hostname) hart überschreiben muss, damit eben dieser Hostname auch bei /server-status/ neben jeden Request geschrieben wird, anderenfalls steht dort immer der Name des Hauptservers.
Weiter: will man innerhalb des selbstgebauten vhost-Moduls die Umgebungsvariable "DOCUMENT_ROOT" (viele Skripte brauchen das) für den jeweiligen Request setzen, dann muss man dazu das core-Modul des Apachen manipulieren und core->ap_document_root belegen. Wenn man das nicht macht, kann man mittels apr_table_set(request->subprocess_env,"DOCUMENT_ROOT","/home/foo") versuchen, die Variable zu setzen bis man schwarz wird, sie wird nämlich weiter hinten irgendwo in der ganzen Requestkette dann wieder mit dem ap_document_root (klar: das DOCUMENT_ROOT des Hauptservers) überschrieben.
Das ist alles so Scheiße und verbietet vor allem eins: multithreading (mpm_worker) in Verbindung mit virtuellen Hosts auf Requestbasis.
Also muss ich mir im Moment noch im Klaren sein, dass ich mein Modul nicht in einer mpm_worker-Umgebung einsetzen kann, nur weil die Apacheleute dieses bekloppte Hierarchie-Server-Modell einsetzen, statt virtuelle Hosts und den Hauptserver gleichzustellen.