О сайтах и не о сайтах

Дефолтный VirtualHost для Apache

Допустим, мы создали несколько виртуальных хостов. Пусть будут следующие,

allmydrawings.com.conf
dev.tulvit.net.conf
scomedy.com.conf
blog.tulvit.net.conf
englishnode.com.conf
tulvit.net.conf

Вопрос. Что Апач "отдаст", если обратиться напрямую к ip сервера (для локалки это localhost или 127.0.0.1)? Или если мы принимаем все сабдомены по маске *.site.com, и перейдем по несуществующему домену? Или если мы удалили какой-то сайт, а DNS еще не успели обновиться?

Во всех случаях Апач вернет "дефолтный" виртуальный хост. А дефолтным он считает самый первый по алфавитному порядку.

Другими словами, если я введу в адресную строку 192.155.82.105 (ip моего сервера), откроется allmydrawings.com

Или вот только что удалил demo.tulvit.net за ненадобностью, но DNS-ы не успели обновиться. Что открывалось по этому домену в течение нескольких часов? allmydrawings.com

Линод еще предоставляет системные урлы для доступа к локалхосту своему, вида id.members.linode.com И что по нему тоже открывается? Снова allmydrawings.com Т. е. выходит суть копия сайта на поддомене Линода. Причем GoogleWebmasters тоже в курсе этого:

Неправильная настройка дефолтного виртуального хоста в Апаче

Что делать? Настроить и включить дефолтный виртуальный хост. Из коробки Апач предлагает следующий:

000-default.conf

Начинается с нулей как раз для того, чтобы быть вверху списка.

Ок, включаем этот дефолтный виртуальный хост, перезагружаем Апач.

a2ensite 000-default.conf
service apache2 reload

Смотрим, что отдается теперь во всех вышеприведенных случаях. А отдается теперь стандартная Апачевская заглушка, с 200 OK! ответом сервера.

Страница Апача по умолчанию

В принципе, так это можно и оставить, почему бы и нет.

Но почему бы не поступить и по-другому. Отдавать не Апачевскую страницу, а банальный 404 "Page Not Found".

А еще лучше - 503 (Service Unavailable), и с более осмысленным сообщением. Например, "Nothing to see here!" Ведь действительно, это не то чтобы какая-то страница не найдена, а просто тут не на что смотреть, можно проходить мимо. И вообще выдавать кастомные сообщения - очень даже хорошая идея. Пройдет время, все забудется, как и что делал. Но если вдруг к этому вернешься - сразу же поймешь, что раз ответ нестандартный, значит сам что-то настраивал, а не конфиг "из коробки".

Ок, создаем наш новый виртуальный хост, назовем его _default.conf (опять же, чтобы был в начале списка, поэтому с подчеркивания):

sudo nano /etc/apache2/sites-available/_default.conf

Cо следующим содержанием:

<VirtualHost *:80>
  Redirect 503 /
  ErrorDocument 503 "Nothing to see here!"
</VirtualHost>

Отключаем 000-default.conf, включаем наш новый _default.conf, перезагружаемся.

a2dissite 000-default.conf
a2ensite _default.conf
service apache2 reload

Проверяем:

503

"Nothing to see here!", 503 ответ сервера. Just as planned!

PS

Пост писался под Apache/2.4.29 Ubuntu, но разные версии могут незначительно отличаться. Например, в Apache/2.2.22 Debian по умолчанию вроде как нет 000-default.conf файла, а просто default.conf, плюс не разрешает создавать конфигурационные файлы, начинающиеся с подчеркивания, поэтому свой кастомный можно назвать 0-default.conf заместо _default.conf, например.

Комментарии

Полезная запись, сам постоянно все забываю это.

Я так еще подумал, в некоторых случаях может лучше будет не выдавать ошибку, а редиректить на какой-то основной сайт, если таковой имеется. В моем случае на tulvit.net

Возможно именно так и поступлю потом, как буду с нуля сервак переставлять в марте (сейчас сижу на Дебиан 7, лол, поддержка которого закончилась в мае прошлого года, проще форматнуть винт и по-новой все накатить, ну и соответственно до сих пор на серваке у меня пхп5, а займусь именно в марте, т. к. с марта Друпал перестанет поддерживать пхп5 уже, другими словами тянул до последнего, а сейчас уже придется).

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.