Конфигурация поддомена Apache не работает

Конфигурация поддомена Apache не работает

У меня есть сервер Debian 6, который был настроен кем-то другим. Меня попросили добавить поддомен на этом сервере.

Я правильно настроил DNS (проверил с помощью nslookup), создал каталог, /var/www/а затем добавил в него новый виртуальный хост /etc/apache2/sites-available(на самом деле я скопировал один из файлов существующих поддоменов и отредактировал его):

<VirtualHost *:80>
    DocumentRoot "/var/www/mysub.example.com"
    ServerName mysub.example.com
    ServerAlias www.mysub.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]

    <Directory /var/www/mysub.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

Затем я добавил свой хост, используя a2ensiteи перезапустил Apache, но домен mysub.example.comперенаправляет на beta.example.comнаш сайт бета-производства. Что странно, beta.example.comв /etc/apache2/sites-available.

Что еще мне нужно сделать, чтобы включить этот поддомен? Я почти уверен, что конфигурация example.comхоста ничего не блокирует, потому что у нас также есть blog.example.comвиртуальный хост, настроенный таким образом, и он отлично работает.

РЕДАКТИРОВАТЬ

Некоторые отладочные результаты:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:18)
*:80                   is a NameVirtualHost
         default server beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
         port 80 namevhost [here comes other unrelated domain name]
         port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/04-forum.example.com:1)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/05-sth.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/06-mysub.example.com:1)
Syntax OK


root@xxx:~# grep -r 'mysub\.example\.com' /etc/apache2
/etc/apache2/apache2.conf:Alias /mysub /var/www/mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        DocumentRoot "/var/www/mysub.example.com"
/etc/apache2/sites-available/06-mysub.example.com:        ServerName mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ServerAlias www.mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ErrorLog "/var/log/apache2/mysub.example.com-error_log"
/etc/apache2/sites-available/06-mysub.example.com:        CustomLog "/var/log/apache2/mysub.example.com-access_log" common
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]
/etc/apache2/sites-available/06-mysub.example.com:        <Directory /var/www/mysub.example.com>

root@xxx:~# grep -r 'beta\.example\.com' /etc/apache2
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common

ПРАВКА 2 Я сделал быстрый тест. Я отключил первый виртуальный хост ( beta.example.com) с помощью:

a2dissite 01-example.com

А затем попытался получить доступ mysub.example.com, и меня перенаправили на blog.example.com- который является вторым по порядку включенных сайтов. Так что похоже, mysub.example.comчто его не находят, и он попадает в первую корзину *.example.comподдоменов, которые он находит.

ПРАВКА 2

Еще один тест: я изменил порядок своих файлов конфигурации так, чтобы мой новый поддомен был первым (по умолчанию). Прямо сейчас:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:14)
*:80                   is a NameVirtualHost
         default server mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
         port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
         port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
Syntax OK

И все равно, если я пытаюсь войти, mysub.example.comменя перенаправляют на beta.example.com. Все blog.example.comпо-прежнему работает отлично.

Есть ли вероятность, что конфигурация домена определена где-то еще (помимо каталога /etc/apache2/sites-available)?

ПРАВКА 3

Дополнительные конфигурации для хостов: beta.example.com и blog.example.com

beta.example.com (файл: /etc/apache2/hosts-available/01-example.com )

<VirtualHost *:80>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com
        ServerAlias www.beta.example.com

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot "/var/www/example.com"
        ServerName beta.example.com:443
        ServerAlias www.beta.example.com:443

        ErrorLog "/var/log/apache2/beta.example.com-error_log"
        CustomLog "/var/log/apache2/beta.example.com-access_log" common

        RewriteEngine On
        #RewriteCond %{HTTP_HOST} ^example.com$ [NC]
        #RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

        <Directory /var/www/example.com>
                AllowOverride All
        </Directory>
</VirtualHost>

blog.example.com (файл: /etc/apache2/hosts-available/02-blog.example.com )

<VirtualHost *:80>
    DocumentRoot "/var/www/blog.example.com"
    ServerName blog.example.com
    ServerAlias www.blog.example.com

    ErrorLog ...[path to file]
    CustomLog [path to file]

    RewriteEngine On 
    #RewriteCond %{HTTP_HOST} ^blog.example.com$ [NC]
    #RewriteRule ^(.*)$ http://www.blog.example.com$1 [R=301,L]

    <Directory /var/www/blog.example.com>
         AllowOverride All
         Require all granted
    </Directory>
</VirtualHost>

решение1

Я советую вам отладить все ваши файлы, как сказал c4f4t0r, попробуйте «apache2ctl -S», а затем попробуйте найти правила перезаписи внутри файлов .htaccess, например:

find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;

В вашем основном файле конфигурации есть что-то «опасное»:

<Directory /var/www/mysub.example.com>
     AllowOverride All # <---- THIS
     Require all granted 
</Directory>

решение2

Вам следует проверить файл /etc/apache2/ports.confи посмотреть на строку NameVirtualHost *:80рядом сListen 80

Если у вас нет этой строки, вы не сможете использовать виртуальные хосты на основе ServerName, поэтому вполне нормально, что в вашем браузере всегда отображается первый включенный виртуальный хост.

решение3

Итак, проблема (и решение) оказались довольно простыми.

Проблема была в том, что папки вновь созданных поддоменов были пустыми - в них не было файла index.php/html. Поэтому сервер, вместо того, чтобы показать его (как каталог), перенаправил на домен по умолчанию - который былbeta.example.com

Итак, конфигурация vhosts была правильной, и после добавления некоторых файлов в папки поддомены начали работать.

Связанный контент