Введение
У меня есть сообщество, и каждый пользователь может иметь свой собственный поддомен в моем проекте, например. 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 с базой данных, чтобы определить, какой сайт пользователя вернуть.
Единственный другой вариант - вручную настроить новые виртуальные хосты для каждого из этих доменов. Это может занять много времени и привести к ошибкам. Я бы выбрал метод, управляемый базой данных, который можно интегрировать в ваш сайт и который будет относительно автоматизирован.