Как настроить виртуальные хосты Apache в Ubuntu 16.04

Вступление

Веб-сервер Apache является наиболее популярным способом предоставления веб-контента в Интернете. На его долю приходится более половины всех активных веб-сайтов в Интернете, и он чрезвычайно мощный и гибкий.

Apache разбивает свою функциональность и компоненты на отдельные блоки, которые можно настраивать и настраивать независимо. Базовая единица, описывающая отдельный сайт или домен, называетсяvirtual host.

Эти обозначения позволяют администратору использовать один сервер для размещения нескольких доменов или сайтов с одного интерфейса или IP-адреса с помощью соответствующего механизма. Это относится ко всем, кто хочет разместить более одного сайта на одном VPS.

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

В этом руководстве мы расскажем, как настроить виртуальные хосты Apache на Ubuntu 16.04 VPS. В ходе этого процесса вы узнаете, как предоставлять разный контент разным посетителям в зависимости от того, какие домены они запрашивают.

Предпосылки

Перед тем, как вы начнете это руководство, вы должныcreate a non-root user, как описано в шагах 1-4 здесь.

Вам также нужно будет установить Apache, чтобы выполнить эти шаги. Если вы еще не сделали этого, вы можете установить Apache на свой сервер с помощьюapt-get:

sudo apt-get update
sudo apt-get install apache2

После того, как эти шаги завершены, мы можем начать.

Для целей этого руководства наша конфигурация сделает виртуальный хост дляexample.com, а другой - дляtest.com. На них будут ссылаться на протяжении всего руководства, но вы должны заменить свои собственные домены или значения, следуя далее.

Чтобы узнатьhow to set up your domain names with DigitalOcean, перейдите по этой ссылке. Если у васnot есть домены, с которыми можно играть, вы можете использовать фиктивные значения.

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

[[step-one -—- create-the-directory-structure]] == Шаг первый - Создание структуры каталогов

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

Нашdocument root (каталог верхнего уровня, который Apache просматривает для поиска контента для обслуживания) будет настроен на отдельные каталоги в каталоге/var/www. Здесь мы создадим каталог для обоих виртуальных хостов, которые планируем создать.

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

Например, для наших сайтов мы собираемся сделать наши каталоги такими:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

Части в красном представляют доменные имена, которые мы хотим обслуживать с нашего VPS.

[[step-two -—- grant-permissions]] == Шаг второй - предоставление разрешений

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

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

Переменная$USER примет значение пользователя, в который вы в настоящее время вошли, как при нажатииEnter. Таким образом, наш обычный пользователь теперь владеет подкаталогамиpublic_html, в которых мы будем хранить наш контент.

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

sudo chmod -R 755 /var/www

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

[[step-three -—- create-demo-pages-for-each-virtual-host]] == Шаг третий - Создайте демонстрационные страницы для каждого виртуального хоста

У нас есть структура каталогов. Давайте создадим некоторый контент для обслуживания.

Мы просто собираемся на демонстрацию, поэтому наши страницы будут очень простыми. Мы просто собираемся создать страницуindex.html для каждого сайта.

Начнем сexample.com. Мы можем открыть файлindex.html в нашем редакторе, набрав:

nano /var/www/example.com/public_html/index.html

В этом файле создайте простой HTML-документ с указанием сайта, к которому он подключен. Мой файл выглядит так:

/var/www/example.com/public_html/index.html


  
    Welcome to Example.com!
  
  
    

Success! The example.com virtual host is working!

Сохраните и закройте файл, когда вы закончите.

Мы можем скопировать этот файл для использования в качестве основы для нашего второго сайта, набрав:

cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

Затем мы можем открыть файл и изменить соответствующие фрагменты информации:

nano /var/www/test.com/public_html/index.html

/var/www/test.com/public_html/index.html


  
    Welcome to Test.com!
  
   

Success! The test.com virtual host is working!

Сохраните и закройте этот файл. Теперь у вас есть страницы, необходимые для тестирования конфигурации виртуального хоста.

[[step-four -—- create-new-virtual-host-files]] == Шаг четвертый - Создание новых файлов виртуального хоста

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

Apache поставляется с файлом виртуального хоста по умолчанию под названием000-default.conf, который мы можем использовать в качестве отправной точки. Мы собираемся скопировать его, чтобы создать файл виртуального хоста для каждого из наших доменов.

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

Создайте первый файл виртуального хоста

Начните с копирования файла для первого домена:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Откройте новый файл в вашем редакторе с правами root:

sudo nano /etc/apache2/sites-available/example.com.conf

Файл будет выглядеть примерно так (я удалил здесь комментарии, чтобы сделать файл более доступным):

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


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Как видите, здесь не так много. Мы настроим элементы здесь для нашего первого домена и добавим некоторые дополнительные директивы. Этот раздел виртуального хоста соответствует запросамany, которые выполняются через порт 80, порт HTTP по умолчанию.

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

ServerAdmin [email protected]

После этого нам нужноadd две директивы. Первый, называемыйServerName, устанавливает базовый домен, который должен соответствовать этому определению виртуального хоста. Скорее всего, это будет ваш домен. Второй, называемыйServerAlias, определяет другие имена, которые должны совпадать, как если бы они были базовым именем. Это полезно для сопоставления заданных вами хостов, напримерwww:

ServerName example.com
ServerAlias www.example.com

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

DocumentRoot /var/www/example.com/public_html

В целом наш файл virtualhost должен выглядеть так:

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


    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Сохраните и закройте файл.

Скопируйте первый виртуальный хост и настройте для второго домена

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

Начните с копирования:

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

Откройте новый файл с привилегиями root в вашем редакторе:

sudo nano /etc/apache2/sites-available/test.com.conf

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

/etc/apache2/sites-available/test.com.conf


    ServerAdmin [email protected]
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Сохраните и закройте файл, когда вы закончите.

[[шаг-пять -—- enable-the-new-virtual-host-files]] == Шаг пятый - Включите новые файлы виртуального хоста

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

Мы можем использовать инструментa2ensite, чтобы включить каждый из наших сайтов следующим образом:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Затем отключите сайт по умолчанию, определенный в000-default.conf:

sudo a2dissite 000-default.conf

Когда вы закончите, вам нужно перезапустить Apache, чтобы эти изменения вступили в силу:

sudo systemctl restart apache2

В другой документации вы также можете увидеть пример использования командыservice:

sudo service apache2 restart

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

[[step-six -—- set-up-local-hosts-file-optional]] == Шаг шестой - Настройка файла локальных хостов (необязательно)

Если вы не использовали настоящие доменные имена, принадлежащие вам, для тестирования этой процедуры, а вместо этого использовали несколько примеров доменов, вы можете по крайней мере протестировать функциональность этого процесса, временно изменив файлhosts на локальном компьютере. .

Это будет перехватывать любые запросы для доменов, которые вы настроили, и направлять их на ваш VPS-сервер, как это делала бы система DNS, если вы использовали зарегистрированные домены. Это будет работать только с вашего компьютера, и просто полезно для тестирования.

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

Если вы работаете на компьютере Mac или Linux, отредактируйте свой локальный файл с правами администратора, введя:

sudo nano /etc/hosts

Если вы работаете на компьютере с Windows, вы можете здесьfind instructions on altering your hosts file.

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

Для доменов, которые я использовал в этом руководстве, предполагая, что мой IP-адрес VPS111.111.111.111, я мог бы добавить следующие строки в конец файла моих хостов:

/etc/hosts

127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

Это направит любые запросыexample.com иtest.com на наш компьютер и отправит их на наш сервер в111.111.111.111. Это то, что мы хотим, если мы на самом деле не являемся владельцами этих доменов для тестирования наших виртуальных хостов.

Сохраните и закройте файл.

[[step-seven -—- test-your-results]] == Шаг седьмой - проверьте свои результаты

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

http://example.com

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

Apache virt host example

Аналогично, если вы можете посетить свою вторую страницу:

http://test.com

Вы увидите файл, который вы создали для вашего второго сайта:

Apache virt host test

Если оба эти сайта работают нормально, вы успешно настроили виртуальные хостыtwo на одном сервере.

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

Если вам нужен доступ в течение длительного времени, подумайте о приобретении доменного имени для каждого сайта, который вам нужен, иsetting it up to point to your VPS server.

Заключение

Если вы последовали этому примеру, теперь у вас должен быть один сервер, обрабатывающий два отдельных доменных имени. Вы можете расширить этот процесс, выполнив шаги, описанные выше, чтобы создать дополнительные виртуальные хосты.

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

Related