Dynamischer virtueller Host auf Wildcard-Subdomain, versteckt hinter CNAME

Dynamischer virtueller Host auf Wildcard-Subdomain, versteckt hinter CNAME

Einführung

Ich habe eine Community und jeder Benutzer kann seine eigene Subdomain in meinem Projekt haben, z. B. username1.mydomain.com

In PHP verwende ich die Variable HTTP_HOST, um den Benutzernamen (username1) zu bestimmen.

Aufgabe

Lassen Sie den Benutzer seine eigene Domäne per CNAME-Eintrag an seine Subdomäne weiterleiten. www.usersdomain.com sollte auf username1.mydomain.com verweisen.

Problem

Nach dem Hinzufügen des CNAME-Eintrags (www.usersdomain.com) sollte die HTTP_HOST-Variable username1.mydomain.com statt www.usersdomain.com zurückgeben.

Wie kann ich dieses Problem beheben? Ich hoffe, jemand kann mir helfen.

Aktuelle virtuelle Host-Einstellung

    <VirtualHost *:80>
    DocumentRoot /home/webapps/egoapp/current/public
          <DirectoryMatch  /\.git/|/\.svn/ >
           Deny from all
         </DirectoryMatch>
         <Directory "/home/webapps/egoapp/current">
          Options FollowSymLinks
          AllowOverride All
          Order allow,deny
          Allow from all
         </Directory>

     RewriteEngine On

     # Enable status page for monitoring purposes                               
     RewriteCond %{REMOTE_ADDR} ^(127.0.0.1)                                    
     RewriteRule ^(/server-status) $1 [H=server-status,L]                       

     # Redirects to a maintenance page if the specified file below exists       
     # ...but it still allows images to be served                               
     RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f                    
     RewriteCond %{SCRIPT_FILENAME} !/system/maintenance.html                   
     RewriteCond %{SCRIPT_FILENAME} !^(.+).(gif|png|jpg|css|js|swf)$            
     RewriteRule ^.*$ /system/maintenance.html [L]           

     # <CUSTOM RULES BEFORE FORWARDING END>
     # Proxy the rest to the load balancer
     RewriteRule ^/(.*)$ http://127.0.0.1:85%{REQUEST_URI} [P,QSA,L]

     # Setup the logs in the appropriate directory
     CustomLog /var/log/httpd/access_log combined
     #ErrorLog  /var/log/httpd/error_log

     #Remote logging -- handle by syslog
     ErrorLog "|logger -p local3.info -t httperror"
     CustomLog "|logger -p local3.info -t http" combined

     LogLevel warn

     # Deflate
     AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch ^Mozilla/4.0[678] no-gzip
     BrowserMatch bMSIE !no-gzip !gzip-only-text/html
     SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>

Ideen zur Lösung dieses Problems

Ich glaube, ich muss die Datei /etc/resolv.conf bearbeiten, aber ich weiß nicht wie ;) Nach ein bisschen Spielen kann ich den Servernamen in 127.0.0.1 oder „undefinierte Domäne“ ändern, aber nicht in username1.mydomain.com

Aktuelle Resov.conf

Suche eu-west-1.compute.internal
Nameserver xxx.xxx.xxx.xxx

Antwort1

Die Variable HTTP_HOST wird aus der tatsächlichen URI-Anforderung erstellt, die der Client an Ihren virtuellen Host gesendet hat. Dies hat eigentlich nichts mit Ihrem DNS zu tun, es ist nur eine Zeichenfolge, daher hilft es nicht, Ihre resolv.conf zu bearbeiten. Wenn der Client eine Verbindung zum Server herstellt und diesen HTTP_HOST bereitstellt, hat er bereits die Arbeit erledigt, DNS aufzulösen und zu bestimmen, an welche IP-Adresse er die Anforderung für diese URI senden möchte.

Ich denke, Ihre einfachste Lösung wäre, die Verknüpfung zwischen www.usersdomain.com und username1 in einer Datenbank zu speichern und die Variable HTTP_HOST mit der Datenbank zu vergleichen, um zu bestimmen, welche Site des Benutzers zurückgegeben werden soll.

Ihre einzige andere Möglichkeit wäre, für jede dieser Domänen manuell neue virtuelle Hosts zu konfigurieren. Dies kann zeitaufwändig und fehleranfällig sein. Ich würde eine datenbankgesteuerte Methode wählen, die in Ihre Site integriert werden könnte und relativ automatisiert wäre.

verwandte Informationen