
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.