Gunther: VirtualHost Redirect oder mod_rewrite oder ...?

Hallo werte Selfgemeinde!

Folgende Situation:
Ein Server hat vom Provider einen vorgegebenen Hostnamen (123.example.com), den ich nicht ändern kann/ will.

Zusätzlich habe ich eine "Verwaltungs-Domain" (example.net), die per DNS auf die IP des Servers zeigt.

Diese Konstellation hat ja nun zur Folge, dass sowohl

  • 123.example.com,
  • example.net
    als auch
  • die Server IP
    alle auf das entsprechende DocumentRoot-Verzeichnis des Servers zeigen.

Frage: Wie stelle ich es jetzt am besten (performantesten) an, dass immer meine Verwaltungs-Domain (example.net) verwendet, bzw. darauf umgeleitet wird?

Der Webserver ist übrigens ein Apache2.

Gruß Gunther

  1. mod_rewrite

    Wenn der HTTP_HOST nicht deinem Wunschhostnamen entspricht, leite auf diesen um.

    Immer zu zweit sie sind. Keine mehr, keine weniger. Eine RewriteRule und eine RewriteCond.

    1. Hi suite,

      mod_rewrite

      Wenn der HTTP_HOST nicht deinem Wunschhostnamen entspricht, leite auf diesen um.

      Immer zu zweit sie sind. Keine mehr, keine weniger. Eine RewriteRule und eine RewriteCond.

      also wenn ich dich richtig verstanden habe meinst du, dass ich für meine Verwaltungs-Domain einen zusätzlichen <VirtualHost> Eintrag erstellen soll und dann im DocRoot per .htaccess umleiten soll?

      Wobei die Umleitung dann wiefolgt aussieht:

      RewriteCond %{HTTP_HOST} ^123\.example\.com$  
      RewriteRule (.*) http://example.net/$1 [R=301,L]  
        
      RewriteCond %{HTTP_HOST} ^xxx\.xxx\.xxx\.xxx$  
      RewriteRule (.*) http://example.net/$1 [R=301,L]
      

      Der Teil war jetzt u. a. hauptsächlich fürs Archiv ..., da ich nun doch den Hostnamen geändert habe (ließ sich doch ermöglichen). ;-)

      Ich habe aber noch ein weiteres, bzw. neues Problem und zwar mit meiner phpMyAdmin Installation.
      Diese liegt in /usr/share/phpmyadmin auf dem Server und in der apache.conf von phpmyadmin habe ich einen 'Alias /phpmyadmin /usr/share/phpmyadmin' drin.

      Frage: Wie stelle ich es denn jetzt an, dass der Apache mir beim Aufruf von 'http://<IP>/phpmyadmin' auch auf 'http://example.net/phpmyadmin' umleitet?

      Gruß Gunther

      1. also wenn ich dich richtig verstanden habe meinst du, dass ich für meine Verwaltungs-Domain einen zusätzlichen <VirtualHost> Eintrag erstellen soll und dann im DocRoot per .htaccess umleiten soll?

        ServerName und ServerAlias kennst du? Es ist nicht notwendig mehrere Virutal Hosts anzulegen.

        Wobei die Umleitung dann wiefolgt aussieht:

        RewriteCond %{HTTP_HOST} ^123.example.com$

        RewriteRule (.*) http://example.net/$1 [R=301,L]

        RewriteCond %{HTTP_HOST} ^xxx.xxx.xxx.xxx$
        RewriteRule (.*) http://example.net/$1 [R=301,L]

        
        >   
        > Der Teil war jetzt u. a. hauptsächlich fürs Archiv ..., da ich nun doch den Hostnamen geändert habe (ließ sich doch ermöglichen). ;-)  
          
        Wenn der HTTP\_HOST \_nicht\_ (wie ich ja schrieb) entspricht, dann leite auf diesen um - egal wieviele Hostnamen es dann gibt und welche noch dazukommen, es wird schon passen.  
          
        RewriteCond %{HTTP\_HOST} !^example\.net$  
        RewriteRule .\* http://example.net/$0 [R=301,L][/code]  
          
        Das Subpattern kannst du dir übrigens auch sparen - auch wenn das jetzt nicht so der Performancebrecher ist ;)  
          
        
        > Frage: Wie stelle ich es denn jetzt an, dass der Apache mir beim Aufruf von 'http://<IP>/phpmyadmin' auch auf 'http://example.net/phpmyadmin' umleitet?  
          
        Das tut die obenstehende Regel ja schon  
          
        (.\*) bzw .\* nimmt eine beliebge zeichenkette im Pfad und $1 bzw $0 hängt diese dann an das Umleitungsziel an.
        
        1. Hi suite!

          Wenn der HTTP_HOST _nicht_ (wie ich ja schrieb) entspricht, dann leite auf diesen um - egal wieviele Hostnamen es dann gibt und welche noch dazukommen, es wird schon passen.

          RewriteCond %{HTTP_HOST} !^example.net$
          RewriteRule .* http://example.net/$0 [R=301,L][/code]

          Das Subpattern kannst du dir übrigens auch sparen - auch wenn das jetzt nicht so der Performancebrecher ist ;)

          Jo, manchmal ist der Weg zu prüfen, ob etwas_nicht_dem entspricht was es sein soll, der einfachere ...! ;-)

          Frage: Wie stelle ich es denn jetzt an, dass der Apache mir beim Aufruf von 'http://<IP>/phpmyadmin' auch auf 'http://example.net/phpmyadmin' umleitet?

          Das tut die obenstehende Regel ja schon

          (.*) bzw .* nimmt eine beliebge zeichenkette im Pfad und $1 bzw $0 hängt diese dann an das Umleitungsziel an.

          Ja, macht sie ..., allerdings muss in der RewriteRule der '/' weg, da ich ansonsten immer 2 '//' bekomme - also 'RewriteRule .* http://example.net$0 [R=301,L]'

          Vielen Dank für deine Hilfe! :-)

          Gruß Gunther

          1. Tach!

            RewriteRule .* http://example.net/$0 [R=301,L]
            [...] allerdings muss in der RewriteRule der '/' weg, da ich ansonsten immer 2 '//' bekomme - also 'RewriteRule .* http://example.net$0 [R=301,L]'

            Erklärung dazu: Der Host-Anteil der URL ist nur 'example.net'. Der / danach ist bereits Bestandteil des Pfades und im Pattern .* eingeschlossen. Deswegen darf da im Ziel kein weiterer / eingefügt werden.

            dedlfix.

            1. RewriteRule .* http://example.net/$0 [R=301,L]
              [...] allerdings muss in der RewriteRule der '/' weg, da ich ansonsten immer 2 '//' bekomme - also 'RewriteRule .* http://example.net$0 [R=301,L]'

              Erklärung dazu: Der Host-Anteil der URL ist nur 'example.net'. Der / danach ist bereits Bestandteil des Pfades und im Pattern .* eingeschlossen. Deswegen darf da im Ziel kein weiterer / eingefügt werden.

              Wobei das natürlich von der RewriteBase abhängt ob der komplette Pfad im Ausdruck der RewriteRule enthalten ist oder eben nur teilweise abzüglich der RewriteBase

  2. Tach!

    Diese Konstellation hat ja nun zur Folge, dass sowohl

    • 123.example.com,
    • example.net
      als auch
    • die Server IP
      alle auf das entsprechende DocumentRoot-Verzeichnis des Servers zeigen.

    Nein, es muss nicht alles auf daselbe DocumentRoot zeigen. In HTTP gibt es den Host-Header, den der Webserver auswerten und dann den Request in den jeweils dafür konfigurierten VHost schicken kann.

    Du schreibst zwar, einen Server zu haben, aber trotzdem noch diese Anmerkung der Vollständigkeit halber: Die Server-IP ist nur dann für dich auswertbar, wenn sie allein deinem Server zugewiesen ist, du also nicht Teil eines Massenhostings bist, bei dem sowieso nur anhand des Host-Headers das Ziel gefunden werden kann und Host-Header-lose IP-Afrufe auf einen Default-host gehen.

    Frage: Wie stelle ich es jetzt am besten (performantesten) an, dass immer meine Verwaltungs-Domain (example.net) verwendet, bzw. darauf umgeleitet wird?

    suits Antwort

    Immer zu zweit sie sind. Keine mehr, keine weniger. Eine RewriteRule und eine RewriteCond.

    ist nur teilweise richtig, denn man kann auch mit einer RewriteRule und zwei mit OR verbundenen RewriteConds arbeiten.

    dedlfix.

    1. Tach!

      Frage: Wie stelle ich es jetzt am besten (performantesten) an, dass immer meine Verwaltungs-Domain (example.net) verwendet, bzw. darauf umgeleitet wird?
      suits Antwort

      Immer zu zweit sie sind. Keine mehr, keine weniger. Eine RewriteRule und eine RewriteCond.
      ist nur teilweise richtig, denn man kann auch mit einer RewriteRule und zwei mit OR verbundenen RewriteConds arbeiten.

      Ach, er meinte die Negation, dann reicht ein Pärchen.

      dedlfix.

      1. ist nur teilweise richtig, denn man kann auch mit einer RewriteRule und zwei mit OR verbundenen RewriteConds arbeiten.

        Ach, er meinte die Negation, dann reicht ein Pärchen.

        Ja :)

    2. ist nur teilweise richtig, denn man kann auch mit einer RewriteRule und zwei mit OR verbundenen RewriteConds arbeiten.

      Ja oder mit einer alleinstehenden RewriteRule :)

      Diese Aussage war auf den konkreten Anwendungsfall bezogen, da hier zur Auswertung des HTTP_HOST genau eine RewriteCond erforderlich und zum Umschreiben/Umleiten eine RewriteRule.

  3. Hallo werte Selfgemeinde!

    Ein weiteres Problem(chen) bei dem ich gerne eure Hilfe in Anspruch nehmen würde, da ich befürchte, dass ich mittlerweile den Wald vor lauter Bäumen nicht mehr sehe ...!

    Folgende Situation:
    Auf dem Server (Apache2) kommt als Verwaltungsscript Froxlor zum Einsatz. Ferner läuft PHP nicht als mod_php5 sondern als FCGID mit SuExec.
    Froxlor bedingt nun zum einen, dass man die IPs und Ports konfiguriert und zum anderen, dass man Kunden anlegt, denen man dann eine oder mehrere Domains zuweist. Das bedeutet, dass eine Domain auch nur jeweils einem Kunden zugeordnet werden kann.

    Nun habe ich zwei IPv4 Adressen, die auf den Server geroutet sind - nennen wir sie der einfachheit halber IP1 und IP2.
    Für die "Standard-Domain" (example.com) unter der IP1 gibt es ein SSL Zertifikat. Aus diesem Grund sollen keine Subdomains verwendet werden, da es sich nicht um ein Wildcard Zertifikat handelt.

    Nun gibt es aber auch diverse Anwendungen wie bspw. phpMyAdmin, Webmail u.a., die jeweils unter https://example.com/<Anwendung>/ erreichbar sind.

    Jetzt hätte ich gerne, dass jede dieser Anwendungen unter einem eigenen (SuExec-)Benutzer läuft. Dabei kam mir die ServerPath Direktive in den Sinn. Ich kann ja neben den von Froxlor automatisch generierten Conf-Dateien auch noch zusätzlich welche händisch anlegen.

    Es wäre mir eine große Hilfe, wenn mir jemand sagen könnte, ob ich auf dem richtigen Dampfer bin, oder ob die Idee eher eine zum Vergessen ist ...! ;-)

    Besten Dank für eure freundliche Unterstützung!

    Gruß Gunther

    1. Tach!

      Auf dem Server (Apache2) kommt als Verwaltungsscript Froxlor zum Einsatz.

      Das kenn ich nicht, deswegen antworte ich nur mit Apache-Wissen.

      Ferner läuft PHP nicht als mod_php5 sondern als FCGID mit SuExec.

      Das ist gut, denn damit kannst du die Anwendungen trennen, wenn das Berechtigungskonzept ordentlich erstellt und umgesetzt wurde.

      Das bedeutet, dass eine Domain auch nur jeweils einem Kunden zugeordnet werden kann.

      Die Kundenverwaltung stört den Apachen nicht weiter.

      Für die "Standard-Domain" (example.com) unter der IP1 gibt es ein SSL Zertifikat. Aus diesem Grund sollen keine Subdomains verwendet werden, da es sich nicht um ein Wildcard Zertifikat handelt.

      Das macht nichts. SSL kann zusätzlich konfiguriert werden. Es ist sogar so, dass SSL einen eigenen VHost bekommt und damit nicht mit den nicht verschlüsselnden VHosts kollidiert. Du kannst also ruhig Nicht-SSL-Subdomains anlegen.

      Außerdem kannst du auch Zertifikate selbst erstellen. Das Zertifikatwesen funktioniert so, dass die Browser einer ganzen Menge Zertifizierungsstellen quasi blind vertrauen. Die von diesen Organisationen erstellten Zertifikate erkennen die Browser von sich aus als vertrauenswürdig an - und das unabhängig davon, ob die Zertifizierungsstelle zum Beispiel unbemerkt gehackt worden ist (schon passiert) oder vielleicht dir aus anderen Gründen nicht unbedingt vertrauenswürdig erscheint. Die Browser schreien aber laut, wenn sie Zertifikate zu Gesicht bekommen, deren Ausstellungsstelle sie nicht vertrauen. Sie können ja nicht wissen, dass aus deiner Sicht das Zertifikat völlig in Ordnung ist. Wenn man will, kann man das ganze Zertifikatswesen auch als Augenauswischerei betrachten.

      Solange nur du oder ein begrenzter Nutzerkreis, den du über das selbst erstellte Zertifikat und das Browsergeschrei aufklären kannst, die Nutzer deines sebst erstellten Zertifikats sind (gerade bei solchen Verwaltungstools wie dem PMA), dann würde ich ohne zu zögern eine Subdomain mit eigenem Zertifikat versehen. Bei den neuen SELFHTML-Servern machen wir das auch so, einerseits, weil das offizielle und bezahlte Zertifikat demnächst abläuft, andererseits weil wir (zukünftig (vorläufig)) keine öffentlichen Inhalte per SSL (mehr) anbieten.

      Nun gibt es aber auch diverse Anwendungen wie bspw. phpMyAdmin, Webmail u.a., die jeweils unter https://example.com/<Anwendung>/ erreichbar sind.
      Jetzt hätte ich gerne, dass jede dieser Anwendungen unter einem eigenen (SuExec-)Benutzer läuft.

      Das geht nicht (direkt), weil SuexecUserGroup - was du brauchst, um den Nutzer zu setzen - nur im VHost konfiguriert werden kann, deine Grenzen also (Sub-)Domänen sind.

      Dabei kam mir die ServerPath Direktive in den Sinn.

      Hier kann ich nicht weiter mit Erfahrung dienen. Das was ich gerade darüber las, klingt so, als ob es zielführend sein könnte - generell zumindest. Allerdings wirst du für jeden VHost - der ja Voraussetzung für einen eigenen User ist - einen eigenen ServerName (sprich Subdomain) vergeben müssen. Aber ob das dann noch mit dem SSL zusammenspielt? Vermutlich kannst du das offizielle Zertifikat auch dort konfigurieren, und vielleicht spielt das mit dem ServerPath-"Trick" zusammen, aber wenn du die Subdomains zum Aufrufen verwendest, wird der Browser logischerweise meckern.

      dedlfix.

      1. Tach,

        Solange nur du oder ein begrenzter Nutzerkreis, den du über das selbst erstellte Zertifikat und das Browsergeschrei aufklären kannst, die Nutzer deines sebst erstellten Zertifikats sind (gerade bei solchen Verwaltungstools wie dem PMA), dann würde ich ohne zu zögern eine Subdomain mit eigenem Zertifikat versehen. Bei den neuen SELFHTML-Servern machen wir das auch so, einerseits, weil das offizielle und bezahlte Zertifikat demnächst abläuft, andererseits weil wir (zukünftig (vorläufig)) keine öffentlichen Inhalte per SSL (mehr) anbieten.

        bei StartSSL gibt es übrigens weiterhin kostenfreie Zertifikate mit einem Root-Zertifikat, das in allen(?) aktuellen Browsern vorhanden ist.

        mfg
        Woodfighter

        1. Tach!

          Solange nur du oder ein begrenzter Nutzerkreis, den du über das selbst erstellte Zertifikat und das Browsergeschrei aufklären kannst, die Nutzer deines sebst erstellten Zertifikats sind (gerade bei solchen Verwaltungstools wie dem PMA), dann würde ich ohne zu zögern eine Subdomain mit eigenem Zertifikat versehen. Bei den neuen SELFHTML-Servern machen wir das auch so, einerseits, weil das offizielle und bezahlte Zertifikat demnächst abläuft, andererseits weil wir (zukünftig (vorläufig)) keine öffentlichen Inhalte per SSL (mehr) anbieten.

          bei StartSSL gibt es übrigens weiterhin kostenfreie Zertifikate mit einem Root-Zertifikat, das in allen(?) aktuellen Browsern vorhanden ist.

          Das hab ich auch bei meiner Recherche gesehen. Vielleicht passt es auf den Anwendungsfall des OP. Aber ich sehe es nicht als Alternative für SELFHTML. Es ist auf genau einen Domainnamen festgelegt und Wildcards sind kostenpflichtig. Zudem muss man sich persönlich anmelden, ein Organisationsname geht nicht. Es wäre kein Problem, ein kostenpflichtiges Zertifikat zu erwerben, soviel Geld ist noch in der Kasse. Wir sehen nur grad keinen wirklichen Bedarf für ein neues Zertifikat oder die Verlängerung des bisherigen.

          dedlfix.

        2. Tach!

          bei StartSSL gibt es übrigens weiterhin kostenfreie Zertifikate mit einem Root-Zertifikat, das in allen(?) aktuellen Browsern vorhanden ist.

          So, ich habe mir jetzt bei denen ein Wildcard Zertifikat geholt -> 2 Jahre gültig und gut ist.

          Nachdem ich jetzt einen ganzen Tag mit der "ServerPath" Geschichte rum experimentiert habe, habe ich aufgegeben. Ich habe es immer nur für einen Pfad, bzw. nur einen VHost mit ServerPath Direktive hinbekommen. sobald man aber mehrere davon hat/braucht, scheint es ohne die Verwendung von Subdomains nicht zu klappen.

          Euch beiden vielen Dank für eure Unterstützung.

          Gruß Gunther