У меня есть VPS в Digital Ocean, работающий под управлением ubuntu 14.04 и apache 2.4.7, DNS также управляется в DO.
У меня есть один домен, назовем его thedomain.com. Я пытался настроить 3 поддомена вместе с основным доменом (thedomain.com, calis.thedomain.com, orlybg.thedomain.com, fubar.thedomain.com).
Я не смог правильно настроить виртуальные хосты apache в браузере, независимо от того, какой домен / поддомен, я иду, я всегда получаю ответ от одного и того же виртуального хоста (я могу сказать по журналам apache) и вывода в браузере.
Основной домен и 3 поддомена - это записи A, www - это CNAME, вот мой файл зоны:
$ORIGIN thedomain.com.
$TTL 1800
thedomain.com. IN SOA ns1.digitalocean.com. hostmaster.thedomain.com. 1422028092 10800 3600 604800 1800
thedomain.com. 1800 IN NS ns1.digitalocean.com.
thedomain.com. 1800 IN NS ns2.digitalocean.com.
thedomain.com. 1800 IN NS ns3.digitalocean.com.
thedomain.com. 1800 IN A 104.236.80.93
www.thedomain.com. 1800 IN CNAME thedomain.com.
orlybg.thedomain.com. 1800 IN A XXX.XXX.XX.XX
fubar.thedomain.com. 1800 IN A XXX.XXX.XX.XX
calis.thedomain.com. 1800 IN A XXX.XXX.XX.XX
У меня есть основной хост и 3 поддомена как 4 отдельных файла виртуального хоста, у меня включены эти 3:
calis.thedomain.com.conf
<VirtualHost *:80>
ServerName calis.thedomain.com
DocumentRoot /var/www/html/calis
<Directory /var/www/html/calis>
# enable the .htaccess rewrites
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_calis.log
CustomLog ${APACHE_LOG_DIR}/access_calis.log combined
</VirtualHost>
thedomain.com.conf
<VirtualHost *:80>
ServerName thedomain.com
DocumentRoot /var/www/html/thedomain
<Directory /var/www/html/thedomain>
# enable the .htaccess rewrites
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
orlybg.thedomain.com.conf
<VirtualHost *:80>
ServerName orlybg.thedomain.com
DocumentRoot /var/www/html/myproject
<Directory /var/www/html/myproject>
# enable the .htaccess rewrites
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_orlybg.log
CustomLog ${APACHE_LOG_DIR}/access_orlybg.log combined
</VirtualHost>
Я использую a2ensite для включения vhosts, у меня включен vhost_alias.load, я перезапускаю / перезагружаю apache несколькими способами, и безуспешно. Я вижу, что директива NameVirtualHost не используется в моей версии apache, раньше у меня был файл conf с ServerName localhost, чтобы не видеть ошибку «Не удалось надежно определить полное доменное имя сервера», но я отключил ее.
apachectl -S
VirtualHost configuration:
*:80 is a NameVirtualHost
default server calis.thedomain.com (/etc/apache2/sites-enabled/calis.thedomain.com.conf:1)
port 80 namevhost calis.thedomain.com (/etc/apache2/sites-enabled/calis.thedomain.com.conf:1)
port 80 namevhost thedomain.com (/etc/apache2/sites-enabled/thedomain.com.conf:1)
port 80 namevhost orlybg.thedomain.com (/etc/apache2/sites-enabled/orlybg.thedomain.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
Я понятия не имею, что попробовать дальше, я пытался несколько дней. Буду очень признателен за любую помощь, спасибо!
У меня есть два предложения помимо этой проблемы
ServerName
с полным доменным именем хоста, на котором Apache обслуживает запрос. Это поможет вам избежать множества неприятностей.Ваш VirtualHost
конфигурация выглядит идеально и не создает проблемы.
В документе Apache говорится, что.
Если совпадение ServerName или ServerAlias не найдено в наборе виртуальных хостов, содержащих наиболее конкретную совпадающую комбинацию IP-адреса и порта, то будет использован первый в списке виртуальный хост, который соответствует этому.
Вообще разные VirtualHost
разделы выбираются на основе Host:
HTTP-заголовок, и если нет VirtualHost
раздел соответствует Host:
header, то первый раздел будет считаться значением по умолчанию и будет обслуживаться. И какой переход зависит от того, как вы делаете запрос в браузере. Вы проверяете это с помощью curl
, чтобы узнать, что вызывает проблему, как показано ниже.
$ curl -L http://localhost -H 'Host: thedomain.com'
Это должно вернуть документы из /var/www/html/thedomain
.
$ curl -L http://localhost -H 'Host: orlybg.thedomain.com'
Это должно вернуть документы из /var/www/html/myproject
.
Здесь с -H
вариант, мы можем отправить собственный заголовок http, поэтому здесь мы используем его для отправки Host:
HTTP-заголовок.
В конце мой друг увидел, что у меня опечатка в vhosts, и он добавил несколько записей в / etc / hosts с доменом и IP-адресом сервера.
thedomain.com XXX.XXX.XX.XX
www.thedomain.com XXX.XXX.XX.XX
orlybg.thedomain.com XXX.XXX.XX.XX
calis.thedomain.com XXX.XXX.XX.XX