Я не очень хороший администратор (и не являюсь носителем английского языка, если на то пошло), и я борюсь с простая задача: добавить субдомен на Apache 2.4. Вот мои файлы conf:
<VirtualHost *:80>
ServerName domain.io
ServerAlias domain.io
ServerAlias *.domain.io
DocumentRoot /var/www/html/david
ErrorLog /var/log/apache2/error.example.com.log
CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>
И второе:
<VirtualHost *:80>
ServerName sub.domain.io
ServerAlias sub.domain.io
ServerAlias *.sub.domain.io
DocumentRoot /var/www/html/ness_pro
<Directory /var/www/html/ness_pro>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
Require all granted
</Directory>
ErrorLog /var/log/apache2/error.example.com.log
CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>
[эта проблема] Каждый раз, когда я пытаюсь получить доступ sub.domain.io в браузере я попадаю на страницу, связанную с domain.io. Я следовал рекомендациям apache 2.4 (т.е. редактировать на доступных сайтах -> a2ensite -> systemctl restart).
[о моей DNS conf] Я перенаправил sub.domain.io к domain.io у моего DNS-провайдера (Gandi). Он указывает на правильный URL. Я наивно думал, что apache проанализирует url запроса на отправка между различными VHosts но похоже, что я был наивен. Есть ли простой способ исправить это (я всегда считал, что переписывание URL-адреса apache довольно непонятно)?
[env] Debian 9 (распбиан) // Apache 2.4
[редактировать] Поскольку все спрашивают. Вот моя запись DNS
@ 10800 IN SOA ns1.gandi.net. hostmaster.gandi.net. 1542647212 10800 3600 604800 10800
@ 10800 IN A 77.193.111.117
@ 10800 IN MX 10 spool.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
@ 10800 IN TXT "v=spf1 include:_mailcust.gandi.net ?all"
blog 10800 IN CNAME blogs.vip.gandi.net.
sub 10800 IN CNAME webredir.vip.gandi.net.
webmail 10800 IN CNAME webmail.gandi.net.
www 10800 IN CNAME webredir.vip.gandi.net.
Это может не ответить на ваш вопрос, но я подготовил тот же сценарий, использовал те же файлы, изменяя только DocumentRoot, и порядок обратный, как я сказал вам в комментариях:
# /etc/apache2/sites-enabled/000-domain.io.conf
<VirtualHost *:80>
ServerName sub.domain.io
ServerAlias sub.domain.io
ServerAlias *.sub.domain.io
DocumentRoot /var/www/html/serverfault/sub
<Directory /var/www/html/serverfault/sub>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
Require all granted
</Directory>
ErrorLog /var/log/apache2/error.example.com.log
CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName domain.io
ServerAlias domain.io
ServerAlias *.domain.io
DocumentRoot /var/www/html/serverfault/parent
ErrorLog /var/log/apache2/error.example.com.log
CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>
Создал тестовые страницы в каждом DocumentRoot
:
echo "parent"> /var/www/html/serverfault/parent/index.html echo "sub"> /var/www/html/serverfault/sub/index.html chown www-data: www-data / var / www / html / serverfault / -R
Чтобы смоделировать DNS, я отредактировал /etc/hosts
файл, включающий:
# ...
127.0.0.1 domain.io
127.0.0.1 sub.domain.io
127.0.0.1 www.domain.io
127.0.0.1 www.sub.domain.io
# ...
Перезапускаем Apache: systemctl restart apache2
И это сработало, как ожидалось:
Более того, используя плагин "Tamper Data" для firefox, я начал манипулировать Host
заголовок для каждого запроса, и ответ меняется в зависимости от него, как и ожидалось.
Я не понимаю, почему ваш не работает. Чтобы узнать, есть ли у вас какие-либо невыполненные предупреждения в службе apache, вы можете использовать journalctl -u apache2
Я использовал DNS из своего домена, чтобы быть более реалистичным для вашего сценария, и он работал так же, как использование файла hosts, с использованием CNAME или с использованием записей A, оба из них работали правильно.
В качестве личного предпочтения я бы сказал, что запись A должна быть именем для сервера, а затем CNAME для разных заголовков хоста, что-то вроде (ваш сервер для меня 1.1.1.1):
webserver01 10800 IN A 1.1.1.1
www 10800 IN CNAME webserver01.domain.io.
sub 10800 IN CNAME webserver01.domain.io.
Или в вашем случае вы можете указать CNAMES на @, где вы устанавливаете IP:
@ 10800 IN SOA ns1.gandi.net. hostmaster.gandi.net. 1542647212 10800 3600 604800 10800
@ 10800 IN A 77.193.111.117
sub 10800 IN CNAME @
www 10800 IN CNAME @
Я не знаю, верен ли этот синтаксис, возможно:
sub 10800 IN CNAME domain.io.
www 10800 IN CNAME domain.io.
(обратите внимание на конечный .
)
Третий вариант - создание всех записей A, указывающих на прямой IP-адрес, что, возможно, труднее поддерживать в более крупной среде, но одинаково эффективно:
sub 10800 IN A 1.1.1.1
www 10800 IN A 1.1.1.1
Одна вещь, которую вы должны учитывать, заключается в том, что sub не является поддоменом domain.io, как вы его показали, это всего лишь хост для domain.io. Вы должны создать зону, чтобы сделать ее поддоменом.
Я почти уверен что webredir.vip.gandi.net.
несет ответственность за то, что вы не получаете ожидаемого поведения, если вы видите документация, вы используете тот тип перенаправления, который говорит:
Когда использовать? Для традиционной веб-переадресации (например, на уже существующий веб-сайт, размещенный на другой странице. Обычно это используется для переадресации домена в блог или другую бесплатную персональную страницу, которая уже размещена по данному адресу).
Это похоже на базовое перенаправление для простейшего хостинга, который они предлагают, если вы перейдете к пункту 3 на той же странице, он говорит:
Когда использовать? Если ваш хост предоставляет вам IP-адрес для вашего HTTP-сервера (или если вы размещаете его самостоятельно, используя хостинг Gandi), или предлагает вам сделать конкретную запись «A», «MX» или «CNAME» (и т. Д.) В вашем файл зоны.
Что, судя по имеющейся у нас информации, я думаю, ваше дело, не так ли?
Я надеюсь, что эта информация и тестирование помогут
Первая запись содержит ServerAlias *.domain.io
. Адрес sub.domain.io
Спички *.domain.io
.
Если вы хотите использовать имя sub.domain.io
, эта запись должна быть первой или, по крайней мере, до *.domain.io
.