Virtualhost dinâmico no subdomínio curinga oculto atrás do CNAME

Virtualhost dinâmico no subdomínio curinga oculto atrás do CNAME

Introdução

Eu tenho uma comunidade e cada usuário pode ter seu próprio subdomínio no meu projeto, por exemplo, nomedeusuario1.meudominio.com

Em PHP eu uso a variável HTTP_HOST para determinar o nome de usuário (username1).

Tarefa

Deixe o usuário rotear seu próprio domínio para seu subdomínio pelo registro CNAME. www.usersdomain.com deve estar vinculado a username1.mydomain.com.

Problema

Depois de adicionar o registro CNAME (www.usersdomain.com), a variável HTTP_HOST deve retornar username1.mydomain.com em vez de www.usersdomain.com.

Como posso corrigir esse problema? Espero que alguém possa me ajudar, por favor.

Configuração atual do 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>

Idéias para resolver este problema

Acho que tenho que editar o /etc/resolv.conf, mas não sei como ;) Depois de jogar um pouco posso mudar o nome do servidor para 127.0.0.1 ou "domínio indefinido", mas não para nomedeusuário1.meudominio.com

Resov.conf atual

pesquise eu-west-1.compute.servidor
de nomes interno xxx.xxx.xxx.xxx

Responder1

A variável HTTP_HOST é criada a partir da solicitação de URI real que o cliente enviou ao seu host virtual. Na verdade, isso não tem nada a ver com o seu DNS, é apenas uma string, portanto, editar o seu resolv.conf não ajudará. No momento em que o cliente está se conectando ao servidor e fornecendo aquele HTTP_HOST, ele já fez o trabalho de resolver o DNS e determinar para qual endereço IP deseja enviar a solicitação para aquele URI.

Acho que sua solução mais fácil seria armazenar a associação entre www.usersdomain.com e username1 em algum tipo de banco de dados e incluir a variável HTTP_HOST no banco de dados para determinar qual site do usuário retornar.

Sua única outra opção seria configurar manualmente novos hosts virtuais para cada um desses domínios. Isso pode ser demorado e sujeito a erros. Eu escolheria um método baseado em banco de dados que pudesse ser integrado ao seu site e fosse relativamente automatizado.

informação relacionada