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

httpd.conf / Проблема конфигурации VirtualHost для blog.example.com

У меня есть сайт, расположенный в / var / www / html /, который отлично работает.

Сейчас я пытаюсь настроить "blog.example.com", добавив следующую запись в httpd.conf

Setup1

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

</VirtualHost>

НО теперь основной сайт перестает работать и ничего не доступно по адресу: http://blog.example.com либо

root@server [~]# apachectl configtest
Syntax OK

Я пробовал следующее, но это тоже не сработало

Setup2

NameVirtualHost *:80

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

</VirtualHost>

(Это связано с https://serverfault.com/questions/209945/setting-up-blog-at-blog-example-com-httpd-conf-issue)

Сайт работает от имени пользователя apache в системе RedHat / CentOS.

Я тоже попробовал следующее, но безуспешно

Setup3

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.example.com
</VirtualHost>

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

Это было лучше, потому что я мог получить доступ к сайту, но ссылка blog.example.com все еще не работала.


Настройка5

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html/blog
<Directory /var/www/html/blog/>
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
</VirtualHost>

Настройка6

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html-blog
</VirtualHost>

В обоих случаях nslookup показывает следующее:

root@server [/etc/httpd/conf]# nslookup
> example.com
Server:         67.99.9.90
Address:        67.99.9.90#53

Non-authoritative answer:
Name:   example.com
Address: 174.999.99.99
> blog.example.com
Server:         67.99.9.90
Address:        67.99.9.90#53

** server can't find blog.example.com: NXDOMAIN

Первый вопрос: как вы определяете «нефункциональный»? Вы получаете сообщение об ошибке с сервера? (В чем ошибка?)

Вы получаете главную страницу, а не страницу блога? (Что-то может быть сломано в конфигурации Named VirtualHosts)

Вы вообще не подключаетесь? (Проблема с DNS? Что-нибудь отображается в журналах Apache?)

Несколько мыслей ... A) вы можете попробовать явно добавить директиву Directory для блога в поддерево и посмотреть, имеет ли это значение.

<Directory /var/www/html/blog/>
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

A) Что произойдет, если вы переместите дерево блога в его структуру каталогов, скажем, / var / www / html-blog, и обновите свой httpd.conf, чтобы отразить его ...

<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/html-blog
<Directory /var/www/html-blog/>
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>
</VirtualHost>

Вы должны проверить документацию Apache на Поддержка виртуальных хостов на основе имен так что вы можете прочитать следующее:

Главный хозяин уходит

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

Редактировать:

Следовательно, основной сайт снова в сети, и мы должны предположить, что на стороне Apache все работает. Похоже, мы не имеем дело с проблемой, касающейся HTTP / 1.1 VHosts (виртуальные хосты на основе имен), поскольку те же функции используются как для основного сайта, так и для блога.

Теперь посмотрим, почему не работает blog.example.com. Вы должны проверить DNS-запись blog.example.com, поскольку она должна указывать на тот же адрес, что и example.com.

$ nslookup
> example.com
[...]
> blog.example.com
[...]
> quit

Редактировать 2

Что касается того, что это nslookup не вернул результат для поддомена, проблема объясняется. Запрос на blog.example.com никогда не достигает вашего веб-сервера apache, потому что DNS-сервер не знает, что с ним делать. blog.example.com.

Итак, что касается того, что мы видим и знаем, ваша конфигурация apache кажется правильной. Главная страница снова в сети после того, как мы добавили ее VirtualHost. Итак, поскольку я верю, что вы сделали это правильно blog. слишком.

То, что следует далее, зависит от DNS-провайдера домена. Проще всего было бы поместить поддомен с подстановочными знаками на example.com для перенаправления на ваш веб-сервер. Это перенаправит любой запрос на ANYTHING.example.com на ваш веб-сервер, который обрабатывает все остальное с помощью VirtualHosts, настроенных вами в apache.

Помните, что DNS-серверу требуется некоторое время, прежде чем их кеши обновятся. Так что эти изменения могут занять некоторое время.

В основной конфигурации http есть ли у вас строка:

ИмяVirtualHost *

раскомментировал? Остальные виртуальные хосты работать не будут.