Bernd S.: Subdomain automatisch erstellen

Hallo!

Ein mit PHP umgesetztes Projekt öffnet die User-Page der
existierenden User anhand der ID

Beispiel:
http://www.bla.tld/userpage=52

Dieser Aufruf würde die Userpage des Users mit ID 52 öffnen,
in unserem Fall die von "Max Mustermann".

Die Art des Aufrufes lässt sich da leider auch nicht mehr ändern,
da es schon aktiv in Betrieb ist, und bereits viele User
angemeldet sind.

Es soll nun jedoch den bestehenden und auch den neuen Usern
bei Anmeldung die Möglichkeit gegeben werden, sich eine SUBDOMAIN auszusuchen.

Beispiel:

Maximilian Mustermann  hat die User-ID 52
Er wünscht sich ab sofort die Subdomain "berliner1980.bla.tld",
unter welcher er (verfügbarkein Vorausgesetzt) zusätzlich erreichbar sein wird.

Dann soll es so sein,  dass Apache alle Aufrufe der Adresse
"berliner1980.bla.tld"  fortan an  http://www.bla.tld/userpage=52
weiterleitet,  wobei egal ist,  ob dabei die richtige Adresse
in der Adressleiste des Browsers sichtbar wird oder nicht.

Es handelt sich um einen root-server,  es sind also alle Admin-Rechte vorhanden...

Apache ließt die VHOST-Dateien aus von:
/etc/apache2/sites-enabled/

Ich dachte mir, wenn das PHP Script in diesem Ordner
(oder wahlweise in einem anderen wo das Script Schreibrechte besitzt)
eine VHOST-Datei anlegen würde,  müsste es klappen.

Zwischen Theorie und Praxis steht aber gerade ein bisschen Unklarheit...

Wie bringe ich die Aufrufe auf eine Datei mit ID  (http://www.bla.tld/userpage=52)
anstatt auf ein Verzeichnis? (wie üblich bei vhosts)

Wie mache ich den Apache Neu-start?
via PHP vermutlich nicht sinnvoll (zu gefährlich dem Script die Rechte zu geben)
Also wohl per Cronjob...

Für mich schwierig ist,  dass der Aufruf eben auf kein Verzeichnis leiten soll,
sondern auf eine Datei mit ID dahinter,  und dass der Name der SUBDOMAIN
nichts mit der ID zu tun hat (und auch nichts mit dem Usernamen)

Ich wäre sehr dankbar für eine konkrete Anleitung,  und vlt. eine config-Datei.

Vielen Dank!
Bernd S.

  1. Hi!

    Ein mit PHP umgesetztes Projekt öffnet die User-Page der existierenden User anhand der ID
    http://www.bla.tld/userpage=52
    Die Art des Aufrufes lässt sich da leider auch nicht mehr ändern, da es schon aktiv in Betrieb ist, und bereits viele User angemeldet sind.

    Zumindest ändern in der Form von Hinzufügungen werden wohl noch möglich sein.

    Es soll nun jedoch den bestehenden und auch den neuen Usern bei Anmeldung die Möglichkeit gegeben werden, sich eine SUBDOMAIN auszusuchen.

    Voraussetzung ist, dass die dem DNS bekannt ist. Es gibt aber auch Catch-All-Konfigurationen für einige DNS-Server. Das heißt, der für diese Second-Level-Domain zuständige DNS-Server muss Catch-All können, wenn du nicht für jede Änderung die Konfiguration ändern willst. Meist ist der ja beim Hoster angesiedelt, weil er bessere Möglichkeiten zur Ausfallsicherung hat, als die Kunden mit ihrem zumeist einen Server, was wiederum die Konfiguration auf die zur Verfügung gestellten Hilfsmittel beschränkt und sich vermutlich auf eine schlecht per Script ansprechbare Webseite beschränkt.

    Dann soll es so sein,  dass Apache alle Aufrufe der Adresse "berliner1980.bla.tld"  fortan an  http://www.bla.tld/userpage=52 weiterleitet,  wobei egal ist,  ob dabei die richtige Adresse in der Adressleiste des Browsers sichtbar wird oder nicht.

    Das ist auch keine gute Idee, weil bei jeder Änderung eine Konfigurationsanpassung inklusive Reload/Restart des Webservers stattfinden muss. Besser denke ich, ist auch hier eine Catch-All-Konfiguration und eine Auswertung des Domainnamens im PHP-Script. Die Zuordnung zwischen Subdomain und User-ID muss ja sowieso in die übliche Datenhaltung eingepflegt werden und kann dort abgefragt werden. Die Zuordnung ist dabei im laufenden Betrieb nicht weiter wichtig, lediglich die bisherigen Abfragen mit der User-ID müssten so ergänzt werden, dass wahlweise die ID oder die Subdomain als Auswahlkriterium genommen werden kann.

    Wie bringe ich die Aufrufe auf eine Datei mit ID  (http://www.bla.tld/userpage=52) anstatt auf ein Verzeichnis? (wie üblich bei vhosts)

    Nach meinem Vorschlag weiß der Apache nichts von dem Zusammenhang zwischen einer Subdomain und einer User-ID. Die kann nur das PHP-Script aus der Datenbank erfahren. Ansonsten kennt der Apache die Direktive RewriteMap.

    Wie mache ich den Apache Neu-start?
    via PHP vermutlich nicht sinnvoll (zu gefährlich dem Script die Rechte zu geben)
    Also wohl per Cronjob...

    Du willst zwar die Konfiguration des Apachen ändern lassen können, traust dich aber nicht, einen Neustart hinzulegen? Nun, es gibt eine Lösung ohne diese Riskien.

    Für mich schwierig ist, dass der Aufruf eben auf kein Verzeichnis leiten soll, sondern auf eine Datei mit ID dahinter,  und dass der Name der SUBDOMAIN nichts mit der ID zu tun hat (und auch nichts mit dem Usernamen)

    Du musst sowieso Änderungen einbauen. Warum änderst du das dann nicht so, dass neben der User-ID auch der Subdomainname zur Datenabfrage verwendet werden kann?

    Lo!

  2. Hello Bernd,

    angesichts dessen, dass der Server für jede Änderung die Konfiguration neu einlesen muss, würde ich auf eine direkte Einflussnahme der Teilnehmer verzichten. Ich würde die "Anträge" der User in eine Liste eintragen, diese Liste ca. 1-2 Minuten vor der eigentlichen Aktion gegen Änderungen sperren (für den User sichtbar). Die eigentliche Aktion würde ich dann nur einige Male am Tag (vier- bis sechsmal?) durch entsprechende (Shell)scripte ausführen lassen.

    Aus der Liste ist der Auftrag dann anschließend verschwunden, oder als erfüllt gegekennzeichnet...

    So behalten die User den Respekt vor der Aktion, Subdomains anzulegen oder zu entfernen.

    Das DNS muss ja, wie Dedlfix schon schrieb, auch berücksichtigt werden.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hello,

    Es handelt sich um einen root-server,  es sind also alle Admin-Rechte vorhanden...

    Apache ließt die VHOST-Dateien aus von:
    /etc/apache2/sites-enabled/

    Ich dachte mir, wenn das PHP Script in diesem Ordner
    (oder wahlweise in einem anderen wo das Script Schreibrechte besitzt)
    eine VHOST-Datei anlegen würde,  müsste es klappen.

    Das PHP-Script müsste nur das Recht haben, ein Shell-Script aufzurufen (z.B. mit exec), dass mittels SUID die passenden Rechte erhält. So verhinderst Du, dass PHP mit den umfangreichen Rechten, die Du sonst vergeben müsstest, Unsinn anfängt.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de