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

Виртуальный хост Apache2 сломан; отображается index.html по умолчанию на поддомене, но корректное содержимое на www.subdomain

У меня есть Linode, настроенный как веб-сервер Ubuntu 10.04.2 с Apache 2.2.14.

У меня всего 4 сайта, все они определены в /etc/apache2/sites-available как виртуальные хосты. Все сайты практически идентичны клонам по настройке. И все сайты, кроме моей последней, работают успешно.

default:      (www.)exampleadnetwork.com
              (www.)example.com
          reseller.example.com
trouble:   client1.example.com

Я получаю эту страницу, когда захожу в client1.example.com сайт:

Оно работает!

Это веб-страница по умолчанию для этого сервера.

Программное обеспечение веб-сервера запущено, но контент еще не добавлен.

В моем ports.conf file У меня NameVirtualHost правильно настроен на мой IP-адрес на порту 80.

Если я перейду к псевдониму www.sub.example.com, сайт заработает! Если я открою его без www, я увижу отрывок «Это работает», размещенный выше. Четный apache2ctl -S показывает, что мой файл vhost правильно разбирается и добавляется в микс.

Мой файл конфигурации vhost выглядит следующим образом:

<VirtualHost 127.0.0.1:80>
    ServerAdmin webmaster@example.com
    ServerName  client1.example.com
    ServerAlias client1.example.com www.client1.example.com
    DocumentRoot    /srv/www/client1.example.com/public_html/
    ErrorLog    /srv/www/client1.example.com/logs/error.log
    CustomLog   /srv/www/client1.example.com/logs/access.log combined

    <directory /srv/www/client1.example.com/public_html/>
        Options -Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </directory>
</VirtualHost>

Остальные сайты представляют собой вариации:

<VirtualHost 127.0.0.1:80>
    ServerAdmin webmaster@example.com
    ServerName  example.com
    ServerAlias example.com www.example.com
    DocumentRoot    /srv/www/example.com/public_html/
    ErrorLog    /srv/www/example.com/logs/error.log
    CustomLog   /srv/www/example.com/logs/access.log combined
</VirtualHost>

Единственный сайт, который отличается, - это другой субдомен:

<VirtualHost 127.0.0.1:80>
    ServerAdmin webmaster@example.com
    ServerName  reseller.example.com
    ServerAlias reseller.example.com
    DocumentRoot    /srv/www/reseller.example.com/public_html/
    ErrorLog    /srv/www/reseller.example.com/logs/error.log
    CustomLog   /srv/www/reseller.example.com/logs/access.log combined
</VirtualHost>

Имена файлов - это полное доменное имя без www. префикс.

Я следил этот совет, но по-прежнему не может получить доступ к субдомену должным образом.

Решения других плакатов сделают это.

Отображается сообщение «Это работает», потому что весь ваш виртуальный хост соответствует localhost. И если вы вызовете client1.example.com, apache пропустит Vhosts локального хоста, а если нет подходящего Vhost, он будет использовать конфигурацию по умолчанию.

Сделайте то, что сказали другие плакаты (измените своих основных хозяев на <VirtualHost *:80> из <VirtualHost *> или изменить ваш виртуальный хост по умолчанию на корень документа, который вам нравится.

Не забывайте: даже если вы правильно определите свои Vhosts, сервер вызовет сайт по умолчанию, если кто-то запросит ваш сервер без имени хоста (например, через IP-адрес).

У меня возникла точно такая же проблема, и, в конце концов, проблема была решена, когда я отключил сайт по умолчанию в apache, отключив его от сайтов с поддержкой:

sudo unlink /etc/apache2/sites-enabled/000-default

После этого все мои сайты отображались правильно. Я вижу, что этот вопрос довольно старый, но надеюсь, что это поможет кому-то еще.

Попробуйте, не имея повторяющихся записей в ServerName и ServerAlias.

Например:

<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName  sub.example.com
ServerAlias www.sub.example.com
DocumentRoot    /srv/www/sub.example.com/public_html/
ErrorLog    /srv/www/sub.example.com/logs/error.log
CustomLog   /srv/www/sub.example.com/logs/access.log combined

<directory /srv/www/sub.example.com/public_html/>
    Options -Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

Некоторые предложения:

  • Изменить <VirtualHost 127.0.0.1:80> для <VirtualHost *:80>
  • Вы разместили NameVirtualHost *:80 конфигурация?
  • Поместите файл index.html под каждый DocumentRoot, очевидно, каждый с другим сообщением, чтобы определить, где вы получаете доступ
  • Попробуйте получить доступ с localhost и, если возможно, попробуйте из другого места

Вы проверили разрешение DNS своих сайтов?

(www.) sub.example.com оба разрешаются на один и тот же компьютер (даже если разные адреса)?

Проверьте журналы, оба, чтобы увидеть, все ли ваши права доступа попадают на правильный сервер (конфигурация), или они попадают в настройки по умолчанию, так как "Это работает!" - это страница по умолчанию для конфигурации по умолчанию.

Если они достигают значения по умолчанию, вы должны определить, почему это так ... каковы различия между конфигурациями. Попробуйте изменить IP-адрес, как предлагалось ранее, поскольку Apache привяжет конфигурацию к конкретному IP-адресу, указанному в директиве VirtualHost.

Ваши конфигурации неправильно настроены для NameVirualHost. Избавьтесь от 127.0.0.1 и сделайте это подстановочным знаком *. Когда вы явно устанавливаете 127.0.0.1 который свяжет все соединения на вашем компьютере с этой конфигурацией. NameVirualHost нужен подстановочный знак *:

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName  client1.example.com
    ServerAlias client1.example.com www.client1.example.com
    DocumentRoot    /srv/www/client1.example.com/public_html/
    ErrorLog    /srv/www/client1.example.com/logs/error.log
    CustomLog   /srv/www/client1.example.com/logs/access.log combined

    <directory /srv/www/client1.example.com/public_html/>
        Options -Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </directory>
</VirtualHost>
The other sites are variations of:

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName  example.com
    ServerAlias example.com www.example.com
    DocumentRoot    /srv/www/example.com/public_html/
    ErrorLog    /srv/www/example.com/logs/error.log
    CustomLog   /srv/www/example.com/logs/access.log combined
</VirtualHost>
The only site the differs is the other subdomain:

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName  reseller.example.com
    ServerAlias reseller.example.com
    DocumentRoot    /srv/www/reseller.example.com/public_html/
    ErrorLog    /srv/www/reseller.example.com/logs/error.log
    CustomLog   /srv/www/reseller.example.com/logs/access.log combined
</VirtualHost>

Также убедитесь, что NameVirtualHost устанавливается следующим образом. В моей настройке под Ubuntu вы увидите эту строку в этом файле: /etc/apache2/ports.conf

NameVirtualHost *:80
Listen 80