Virtualhost dinámico en subdominio comodín oculto detrás de CNAME

Virtualhost dinámico en subdominio comodín oculto detrás de CNAME

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.

información relacionada