Меню

apache настройка хост по умолчанию

Настройка виртуальных хостов Apache

Apache — это один из самых популярных веб-серверов для размещения сайтов на хостингах и VPS, а также для создания тестовых окружений. Если на вашем сервере один сайт, то все довольно просто, все запросы, поступающие к серверу, отправляется этот единственный сайт. А что если сайтов несколько? Как Apache будет понимать кому адресован запрос?

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

Как работают виртуальные хосты Apache?

Не будем пока о локальных системах. Если у вас есть веб-сайт, то наверное, вы занимались парковкой домена и уже знаете как все настраивается. Сначала используется DNS сервер, который выдает IP адрес вашего сервера всем клиентам, запросившим адрес этого домена. Затем клиенты отправляют запрос на ip вашего сервера, а веб-сервер уже должен его обработать.

Обычно, на хостингах один веб-сервер обслуживает десятки, а то и сотни сайтов. И как вы понимаете, все запросы поступают на один ip. Для распределения их между папками на сервере используется имя домена, которое передается вместе с запросом в HTTP заголовке «Host». Именно поэтому нужно выполнять парковку домена не только на DNS сервисе, но и на вашем сервере.

Вы настраиваете виртуальные хосты Apache, а затем веб-сервер сравнивает домен, переданный в заголовке «Host» с доступными виртуальными доменами и если находит совпадение, то возвращает содержимое настроенной папки или содержимое по умолчанию, или ошибку 404. Нужно сказать, что вы можете настроить виртуальный хост для любого домена, например, vk.com или losst.ru. Но пользователи смогут получить доступ к этому домену у вас, только если к вам будут поступать запросы от браузеров, в которых будет значиться этот домен. А теперь детальнее про настройку.

Настройка виртуальных хостов Apache?

Я уже подробно рассматривал как настроить Apache в отдельной статье. Поэтому не буду полностью расписывать здесь все конфигурационные файлы. Остановимся на файлах виртуальных хостов. Для удобства они вынесены в отдельные папки:

Ясно, что это разделение очень условно. Вы можете его убрать и добавлять свои виртуальные хосты прямо в основной конфигурационный файл. Все файлы из этих папок подключаются к нему с помощью директив Include. Но ведь так намного удобнее. В папке sites-available находятся все конфигурационные файлы, но они пока еще не активированы и отсюда не импортируются никуда. При активации нужного хоста на него просто создается ссылка в папку /etc/apache2/sites-enabled.

Читайте также:  sony ericsson live with walkman как сбросить настройки

Для примера, создадим новый конфигурационный файл для виртуального хоста site1.ru. Для этого просто скопируем существующую конфигурацию для хоста по умолчанию — 000-default:

$ sudo cp /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/site1.ru.conf

Сначала рассмотрим синтаксис того, что вы увидите в этом файле:

адрес_хоста_для прослушивания : порт >
ServerName домен
ServerAlias псевдоним_домена
ServerAdmin емейл@администратора
DocumentRoot /путь/к/файлам/сайта
ErrorLog /куда/сохранять/логи/ошибок/error.log
CustomLog /куда/сохранять/логи/доступа/access.log combined

Это минимальная конфигурация, которую вам нужно указать, чтобы создать виртуальный хост Apache. Конечно, здесь вы можете использовать и другие директивы Apache, такие как Deny, Allow и многие другие. А теперь рассмотрим наш пример для тестового сайта site1.ru:

ServerName site1.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/site1.ru/
ErrorLog $/error.log
CustomLog $/access.log combined

Здесь мы используем звездочку вместо ip адреса, это значит, что веб-сервер будет слушать соединения на всех адресах, как на внешнем, так и на localhost. Порт 80, это порт по умолчанию. Затем указываем домен, электронный адрес администратора, и путь к папке, в которой будут находиться данные сайта. Две строчки Log говорят куда сохранять логи, но добавлять их необязательно. Дальше, нам нужно активировать этот хост. Мы можем вручную создать ссылку или использовать уже заготовленную команду:

Затем перезапустите Apache:

sudo systemctl restart apache2

И нам осталось все это протестировать. Если ваш сервер имен еще не направляет запросы к домену на ваш ip, а вы хотите уже проверить как все работает, можно пойти обходным путем. Для этого достаточно внести изменения в файл /etc/hosts на машине, с которой вы собрались открывать сайт. Этот файл, такой себе локальный DNS. Если компьютер находит ip для домена в нем, то запрос в интернет уже не отправляется. Если вы собираетесь тестировать с той же машины, на которую установлен Apache2, добавьте:

Если же это будет другой компьютер, то вместо 127.0.0.1 нужно использовать адрес вашего сервера, на котором установлен Apache. Затем можете открыть сайт в браузере:

Настройка виртуальных хостов с SSL

Если вы хотите использовать современный безопасный протокол https для работы вашего виртуального хоста, то вам кроме обычного хоста на порту 80 будет необходимо создать виртуальный хост на порту 443. Здесь будет не так много отличий, вот пример, для нашего сайта site1.ru:

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName site1.ru
ErrorLog $/error.log
CustomLog $/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Читайте также:  воля настройка модема thomson

SSLOptions +StdEnvVars

Теперь о каждой новой строчке более подробно:

  • — весь код в этой секции будет выполнен только в том случае, если активирован модуль mod_ssl. Это нужно для безопасности, чтобы если модуль не активирован, то код не вызывал ошибок;
  • SSLEngine — включает поддержку SSL;
  • SSLCertificateFile, SSLCertificateKeyFile — пути к файлам сертификата и приватного ключа;
  • SSLOptions — для скриптов php, cgi и других мы передаем стандартные SSL опции.

Вот и все. Как видите, не так сложно. Осталось перезапустить Apache и проверить как все работает:

sudo a2enmod ssl
sudo a2ensite site1.ru-ssl
sudo systemctl restart apache2

Затем откройте https адрес в браузере:

Выводы

В этой статье мы рассмотрели как выполняется настройка виртуальных хостов Apache. Как видите, один веб-сервер может обслуживать сотни сайтов, а создание виртуальных хостов apache совсем не сложно. Надеюсь, эта статья была вам полезной. Если у вас остались вопросы, спрашивайте в комментариях!

источник

Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache

При настройке виртуальных хостов Apache может возникнуть вопрос, что произойдёт, если на сервер придёт запрос, не предназначенный ни для одного из хостов? Пример такого запроса — обращение к веб-серверу по IP без указания имени хоста. Или обращение к серверу с неверным (отсутствующем на сервере) именем хоста.

Это не вызовет ошибку в Apache — веб сервер покажет содержимое хоста по умолчанию. Чтобы понимать, что именно будет показано и как изменить хост по умолчанию в Apache, будет рассказано в этой инструкции.

Если на веб-сервере всего один хост (виртуальный хост), то он и будет хостом по умолчанию.

Если хостов два и более, то будут работать следующие правила:

  • если запрошен существующий хост, то именно он и будет показан
  • если запрошен НЕ существующий хост, то будет показан ПЕРВЫЙ встретившийся в конфигурационных файлах хост

То есть при использовании виртуальных хостов на основе имени (name-based virtual hosts) хостом по умолчанию становится первый загруженный хост. Например, у веб-сервера следующий конфигурационный файл:

Если запрошен домен domain-one.com, то будет показано его содержимое. Если запрошен домен domain-two.com, то будет показано его содержимое. Если запрошен любой другой хост, который не существует на сервере, то будет показано содержимое domain-one.com.

Обычно на сервере не один монолитный конфигурационный файл, а несколько конфигурационных файлов для каждого хоста, организованные следующие образом:

Читайте также:  настройка mysql для squid

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

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

Некоторые предлагают для установки виртуального хоста по умолчанию использовать

это может работать, но несёт ряд последствий. Действительно, такая конструкция будет соответствовать всему что угодно, но это может переписать заданные после неё другие виртуальные хосты. Может быть это решение и будет работать, если поместить хост с ServerAlias * в самый конец, чтобы он не мог переписать значения других виртуальных хостов. Но это решение просто более сложное по сравнению с предложенным ранее: нужно добавить директиву и нужно изменить порядок хостов, в то время как в первоначально предложенном варианте достаточно только изменить порядок хостов.

_default_ в Apache

Вместо указания звёздочки (*), которая соответствует любому IP адресу, можно указать слово _default_. Судя по всему, функции звёздочки и _default_ очень похожие или идентичные. В примерах конфигураций со словом _default_ для виртуальных хостов не используется директива ServerName (что для обычных хостов является некорректным). Дело в том, что в Apache 2.2 было более жёсткое разграничение виртуальны хостов на основе имени и виртуальны хостов на основе IP. Для Apache 2.2 значение * и _default_ было различным и они применялись в различных контекстах.

Начиная с Apache 2.4 всё стало намного проще:

  • Символ *, выполняет роль подстановочного символа и соответствует любому IP адресу.
  • Строка _default_ в настоящее время является псевдонимом (полным аналогом) *

_default_ для всех портов

Чтобы перехватить каждый запрос на IP адрес и порт, комбинация которых не используется в других виртуальных хостах, нужно записать так:

_default_ для различных портов

Как и предыдущий пример 1, но сделаны различные дефолтные виртуальные хосты для порта 80 и всех других портов:

Любое использование * в декларации виртуальных хостов будет иметь более высокий приоритет чем _default_.

источник

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

Adblock
detector