
Introducción
Tengo una comunidad y cada usuario puede tener su propio subdominio en mi proyecto, por ejemplo, nombre de usuario1.midominio.com.
En PHP utilizo la variable HTTP_HOST para determinar el nombre de usuario (nombre de usuario1).
Tarea
Permita que el usuario enrute su propio dominio a su subdominio mediante el registro CNAME. www.usersdomain.com debe vincularse a nombre de usuario1.mydomain.com.
Problema
Después de agregar el registro CNAME (www.usersdomain.com), la variable HTTP_HOST debería devolver nombre de usuario1.mydomain.com en lugar de www.usersdomain.com.
¿Cómo puedo solucionar este problema? Espero que alguien pueda ayudarme, por favor.
Configuración actual del host virtual
<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>
Ideas para resolver este problema.
Creo que tengo que editar /etc/resolv.conf, pero no sé cómo;) Después de jugar un poco, puedo cambiar el nombre del servidor a 127.0.0.1 o "dominio no definido", pero no a nombre de usuario1.midominio.com.
Resov.conf actual
buscar eu-west-1.compute.servidor
de nombres interno xxx.xxx.xxx.xxx
Respuesta1
La variable HTTP_HOST se crea a partir de la solicitud URI real que el cliente envió a su host virtual. En realidad, esto no tiene nada que ver con su DNS, es solo una cadena, por lo que editar su resolv.conf no ayudará. En el momento en que el cliente se conecta al servidor y proporciona HTTP_HOST, ya ha realizado el trabajo de resolver DNS y determinar a qué dirección IP desea enviar la solicitud para ese URI.
Creo que su solución más sencilla sería almacenar la asociación entre www.usersdomain.com y nombre de usuario1 en una base de datos de algún tipo y comprimir la variable HTTP_HOST en la base de datos para determinar el sitio de qué usuario regresar.
Su única otra opción sería configurar manualmente nuevos hosts virtuales para cada uno de estos dominios. Esto puede llevar mucho tiempo y ser propenso a errores. Yo optaría por un método basado en una base de datos que podría integrarse en su sitio y sería relativamente automatizado.