Назад | Перейти на главную страницу

Динамический виртуальный хост на поддомене подстановочного знака, скрытом за CNAME

Введение

У меня есть сообщество, и каждый пользователь может иметь свой собственный поддомен в моем проекте, например. username1.mydomain.com

В PHP я использую переменную HTTP_HOST для определения имени пользователя (username1).

Задача

Позвольте пользователю направить собственный домен в свой поддомен с помощью записи CNAME. www.usersdomain.com должен ссылаться на username1.mydomain.com.

Проблема

После добавления записи CNAME (www.usersdomain.com) переменная HTTP_HOST должна возвращать username1.mydomain.com вместо www.usersdomain.com.

Как я могу исправить эту проблему? Надеюсь, кто-нибудь может мне помочь, пожалуйста.

Текущая настройка виртуального хоста

    <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>

Идеи решения этой проблемы

Я думаю, что мне нужно отредактировать /etc/resolv.conf, но я не знаю как;) Немного поиграв, я могу изменить Servername на 127.0.0.1 или «undefinded domain», но не на username1.mydomain.com

Текущий Resov.conf

поиск eu-west-1.compute.internal
сервер имен xxx.xxx.xxx.xxx

Переменная HTTP_HOST создается из фактического запроса URI, который клиент отправил вашему виртуальному хосту. На самом деле это не имеет ничего общего с вашим DNS, это просто строка, поэтому редактирование файла resolv.conf не поможет. В момент, когда клиент подключается к серверу и предоставляет этот HTTP_HOST, он уже выполнил работу по разрешению DNS и определению, на какой IP-адрес он хочет отправить запрос для этого URI.

Я думаю, что вашим самым простым решением было бы сохранить связь между www.usersdomain.com и username1 в какой-либо базе данных и сопоставить переменную HTTP_HOST с базой данных, чтобы определить, какой сайт пользователя вернуть.

Единственный другой вариант - вручную настроить новые виртуальные хосты для каждого из этих доменов. Это может занять много времени и привести к ошибкам. Я бы выбрал метод, управляемый базой данных, который можно интегрировать в ваш сайт и который будет относительно автоматизирован.