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

несколько поддоменов apache 2.4

Я не очень хороший администратор (и не являюсь носителем английского языка, если на то пошло), и я борюсь с простая задача: добавить субдомен на 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

Я использовал 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.