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

Различные поддомены, apache отвечает одним и тем же vhost

У меня есть 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

Я понятия не имею, что попробовать дальше, я пытался несколько дней. Буду очень признателен за любую помощь, спасибо!

У меня есть два предложения помимо этой проблемы

  1. Добавить ServerName с полным доменным именем хоста, на котором Apache обслуживает запрос. Это поможет вам избежать множества неприятностей.
  2. Если все поддомены имеют разные IP-адреса, используйте виртуализацию на основе IP вместо виртуализации на основе имени.

Ваш 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