Поиск по сайту:

Как разместить несколько веб-сайтов на одном сервере Apache


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

Виртуальные хосты создаются с помощью директивы в файлах конфигурации Apache. Обычно они хранятся в каталоге sites-available в месте установки Apache. В системах Debian это обычно /etc/apache2; другие дистрибутивы могут использовать /etc/httpd.

Мы предполагаем, что у вас уже настроен Apache. Мы создадим два отдельных виртуальных хоста, a.example.com и b.example.com. Количество виртуальных хостов, которые вы можете использовать, не ограничено — если вам нужна дюжина сайтов на одном сервере, Apache сделает это.

Настройка сайтов

Каждому сайту нужен собственный каталог файловой системы. В этот каталог вы поместите файлы веб-сайта, такие как HTML, CSS и JavaScript. Apache называет его DocumentRoot, так как это корень, из которого обслуживаются документы.

Вы можете разместить свои сайты в любом месте вашей системы. Вы часто будете видеть виртуальные хосты, хранящиеся в /var/www, причем каждый сайт получает свою собственную папку:

sudo mkdir -p /var/www/a.example.com
sudo mkdir -p /var/www/b.example.com

/var/www обычно принадлежит root, поэтому мы используем sudo для создания подкаталогов. Затем измените владельца корней документов на своего пользователя и установите соответствующие разрешения. Это позволит Apache читать файлы, предоставляя вам доступ для записи, чтобы вы могли добавлять свой контент.

sudo chown -R $USER:$USER /var/www/a.example.com
sudo chown -R $USER:$USER /var/www/b.example.com
sudo chmod -R 755 /var/www

Скопируйте файлы вашего сайта в каталоги. Мы будем использовать два простых файла index.html:

a.example.com/index.html

<html>
    <body>
        <h1>a.example.com</h1>
    </body>
</html>

b.example.com/index.html

<html>
    <body>
        <h1>b.example.com</h1>
    </body>
</html>

Настройка Apache

Теперь вы готовы настроить свои виртуальные хосты. Создайте новый файл виртуального хоста для каждого из сайтов. Неважно, как вы назовете файл; по соглашению оно обычно совпадает с именем хоста вашего сайта.

Как минимум, каждый виртуальный хост должен объявить два свойства:

  • ServerName — имя хоста (домена), с которого будет обслуживаться сайт.
  • DocumentRoot — расположение в файловой системе, которое будет использоваться для этого виртуального хоста.

Вот пример конфигурации для наших двух сайтов:

/etc/apache2/sites-available/a.example.com.conf

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

/etc/apache2/sites-available/b.example.com.conf

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

Этой базовой настройки достаточно, чтобы запустить два сайта! *:80 означает, что Apache рассмотрит возможность использования этого виртуального хоста для любого запроса, поступающего на порт 80. Позже они будут устранены с помощью объявлений ServerName.

Включение виртуальных хостов

Добавление виртуального хоста к sites-available делает его доступным, но не активным. Вам нужно вручную включить каждый сайт, который вы хотите использовать. Конфигурации виртуального хоста для включения должны быть связаны символической ссылкой в /etc/apache2/sites-enabled (или /etc/httpd/sites-enabled).

В системах Debian вы можете использовать команду a2ensite, чтобы упростить этот шаг:

a2ensite a.example.com
a2ensite b.example.com

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

sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/a.example.com.conf
sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/b.example.com.conf

Наконец, перезапустите Apache, чтобы применить новую конфигурацию. Изменения виртуального хоста требуют перезагрузки сервера после того, как вы добавили их в sites-enabled.

sudo apache2ctl restart

Теперь вы должны увидеть, как Apache обслуживает ваши два разных сайта. Если у вас нет разрешения DNS на ваш сервер, вы можете изменить системный файл /etc/hosts, чтобы проверить свои настройки.

Добавьте следующие строки в /etc/hosts:

127.0.0.1 a.example.com
127.0.0.1 b.example.com

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

Псевдонимы сайта

Если вы хотите обслуживать один и тот же сайт в нескольких доменах, используйте директиву ServerAlias в своем виртуальном хосте. Каждый псевдоним будет учитываться, когда Apache сопоставляет ваш виртуальный хост с входящими запросами. Виртуальный хост будет использоваться, если заголовок запроса Host соответствует ServerAlias или ServerName.

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

В этом примере сайт a будет обслуживаться на трех доменах без необходимости повторять какие-либо детали конфигурации. Вы должны использовать ServerAlias для определения нескольких доменов — возможно повторение ServerName, но это переопределит предыдущие варианты использования.

Другие параметры конфигурации

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

<VirtualHost *:80>
    ServerName a.example.com
    DocumentRoot /var/www/a.example.com
    DirectoryIndex my-index.html

    <Directory /var/www/a.example.com>
        AllowOverride All
        Options -Indexes
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Этот виртуальный хост применяет гораздо больше настроек. my-index.html обслуживается по умолчанию вместо index.html, и используются настраиваемые местоположения журналов. Кроме того, к самому корню документа применяются дополнительные настройки с помощью блока Directory. Переопределения .htaccess разрешены (AllowOverride All), а страницы со списком каталогов Apache по умолчанию отключены (Options -Indexes).

Хосты IP-адресов

Apache также поддерживает хосты на основе IP, помимо хостов на основе имен, которые мы видели до сих пор. Хосты на основе IP идеально подходят, когда ваш сервер имеет несколько сетевых интерфейсов, таких как внутренняя сеть компании и общедоступный Интернет. Вы можете обслуживать другой сайт в зависимости от используемого сетевого интерфейса.

<VirtualHost 172.17.0.1>
    ServerName a.example.com
    DocumentRoot /var/www/a
</VirtualHost>

<VirtualHost 172.17.0.1>
    ServerName b.example.com
    DocumentRoot /var/www/b
</VirtualHost>

<VirtualHost 192.168.0.1>
    ServerName a.example.com
    DocumentRoot /var/www/a2
</VirtualHost

В этом примере запросы, отправленные на a.example.com через интерфейс с IP-адресом 192.168.0.1, получат другой контент, чем запросы, отправленные через 172.17.0.1. Кроме того, пользователи последнего IP-адреса смогут получить доступ к b.example.com. Этот сайт недоступен для пользователей, подключающихся через 192.168.0.1.

Такой подход позволяет использовать один сервер для корпоративной интрасети и общедоступного веб-сайта. Привяжите внутренние сайты к IP-адресу вашего сервера в локальной сети; запускать публичные хосты против его WAN-адреса.

Сопоставление виртуального хоста

Процедура разрешения виртуальных хостов Apache хорошо документирована и довольно проста.

Как правило, Apache пытается сопоставить заголовок запроса Host с полем ServerName или ServerAlias в конфигурации виртуального хоста. Если совпадений несколько, Apache будет использовать первый найденный виртуальный хост.

Виртуальные хосты сортируются в порядке имени файла. Если вам нужно, чтобы сайт соответствовал другому, переименуйте его файл конфигурации, чтобы он сортировался перед целевым сайтом. Вы можете добавить числовой префикс, например 000-a.example.com.conf. В большинстве случаев в этом нет необходимости — если все ваши сайты имеют уникальные домены, вы никогда не столкнетесь с конфликтом.

Заключение

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

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




Все права защищены. © Linux-Console.net • 2019-2024