Создать виртуальный хост ubuntu. Cоздание виртуальных хостов apache

Нескольких сайтов, то Apache для этих целей предоставляет возможность настройки виртуальных хостов (virtual hosts). Виртуальные хосты бывают двух видов: name-based virtual hosts , то есть привязанные к доменному имени, и IP-based virtual hosts , то есть привязанные к IP-адресу. Виртуальные хосты первого типа используют разные имена для одного IP-адреса, а второго типа – используют для каждого сайта отдельный IP-адрес. Создание виртуальных хостов в Apache необходимы, если на вашем сервере есть несколько сайтов, а их настройка необходима для корректного отображения всех сайтов.

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

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

В Red-Hat /CentOS /Fedora :

/etc/httpd/conf/httpd.conf

Debian /Ubuntu :

/etc/apache2/apache2.conf

Вторым способом настройки является использование собственных .conf файлов, которые должны размещаться по пути:

В Red-Hat /CentOS /Fedora :

/etc/httpd/conf.d/filename.conf,

Debian /Ubuntu :

/etc/apache2/conf.d/filename.conf.

Как правило, в конфигурационном файле httpd.conf или apache2.conf раздел управления виртуальными хостами располагается в самом конце. Для добавления виртуального хоста нужно будет открыть этот файл и раскомментировать в нём (убрать # ) директиву NameVirtualHost *:80 (Аргумент * обозначает «все имена хостов»). Если будет использоваться способ размещения конфигурации в conf.d , то указанную директиву не нужно раскомментировать, а следует определить её в самом создаваемом файле.

После NameVirtualHost следует блок VirtualHost *:80 . Подобные блоки и являются конфигурацией ваших виртуальных хостов. Выглядит это все примерно следующим образом:

NameVirtualHost *:80 AllowOverride All Options All ServerAdmin [email protected] DocumentRoot /var/www/site1.ru ServerName site1.ru ServerAlias www.site1.ru ErrorLog logs/site1.ru-error_log CustomLog logs/site1.ru-access_log common ServerAdmin [email protected] DocumentRoot /var/www/site2.ru ServerName site2.ru ServerAlias www.site2.ru ErrorLog logs/site2.ru-error_log CustomLog logs/site2.ru-access_log common

Именно здесь и производятся все настройки виртуальных хостов, а также, подключение или отключение определенных опций.

Рассмотрим более детально, за что отвечает каждая указанная выше директива.

1. Директива ServerAdmin указывает электронный адрес администратора сервера, на который приходят все уведомления с хоста, касающиеся его администрирования.

2. Директива DocumentRoot указывает корневую директорию с файлами сайта, которые должны будут выдаваться веб-сервером клиенту (браузеру).

3. Директива Server Name определяет имя хоста, по запросу которого должны будут выдаваться файлы, расположенные в DocumentRoot.

4. Директива ServerAlias служит для задания альтернативных имен хоста (алиасов, псевдонимов), на которые он откликается.

5. Директива ErrorLog задает файлы протоколов ошибок для каждого хоста, а CustomLog – файлы протоколов для всего остального, кроме ошибок.

До блоков с виртуалхостами, как вы заметили, есть еще запись:

AllowOverride All

В тегах заключается перечень директив (параметров), которые будут применяться к конкретной директории, которая указывается в открывающем теге. В примере выше – это var/www/ . Указанная директива AllowOverride указывает, использовать ли файлы .htaccess и если да, то какие глобальные директивы веб-сервера в можно переопределять в таких файлах. В представленном выше примере значение AllowOverride установленно в All , что разрешает обрабатывать файлы.htaccess и все указанные в нём директивы. Существуют и другие возможные значения:

AuthConfig – разрешает использовать директивы авторизации (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require, и т.д..).

FileInfo – разрешает использовать директивы, управляющие типами документов (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, и т.д..).

Indexes — разрешает использовать директивы для управления индексацией каталогов (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, и т.д..).

Limit — разрешает использовать директивы управления доступом (allow, deny и order).

Options — разрешает использовать директивы, с помощью которых можно управлять специфическими особенностями каталога (Options и XBitHack).

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

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

Apachectl configtest apachectl -S apachectl -d

Если получено сообщение “Syntax OK ”, значит ошибок нет и можно перезагружать веб-сервер, чтобы применились изменения. Сделать это можно с помощью следующих команд:

Red-Hat/CentOS/Fedora:

Service httpd restart

/etc/init.d/ httpd restart

Debian/Ubuntu:

Service apache2 restart

/etc/init.d/apache2 restart

Далее вы можете столкнуться со следующей проблемой. При поступлении запроса Apache проходит по всему списку виртуальных хостов в поисках соответствующего, и, если не находит соответствия, выдает первый по порядку хост. Чтобы устранить данную неприятность, специалисты придумали так называемую секцию-заглушку, которую следует вставить перед первой секцией VirtualHost реального сайта. Выглядит она приблизительно следующим образом:

ServerName default DocumentRoot /var/www/default

Таким образом, все неправильные запросы будут отсылаться по пути var/www/default , где можно создать индексную страницу, которая будет сообщать о неправильном запросе.

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

Setsebool -P httpd_enable_homedirs 1

Setsebool -P apache2_enable_homedirs 1

Для того чтобы Apache имел доступ к определенной директории, например, к /home/mydir следует использовать команду:

Chcon -R -t httpd_sys_content_t /home/mydir

Chcon -R -t apache2_sys_content_t /home/mydir

При отключенном SELinux для предоставления Apache доступа к той или иной домашней директории сайта, вам нужно будет вручную отредактировать его конфигурационный файл (/etc/httpd/conf/httpd.conf в CentOS/Fedora или /etc/apache2/apache2.conf в Debian/Ubuntu ).

Открыв конфигурационный файл веб-сервера для редактирования, найдите строку DocumentRoot (при использовании редактора nano ее можно отыскать с помощью комбинации клавиш Ctrl+W ). Замените значение в кавычках /var/www/html на абсолютный путь к домашней директории сайта (например, /home/username/site.com ). Сохраните изменения и выйдите из меню редактора (Ctrl+O и Ctrl+X ). Перезапустите Apache.

Если у вас на VPS установлена ОС Debian/Ubuntu , то править строку DocumentRoot необходимо в файле /etc/apache2/sites-available/default . Откройте его для редактирования и замените стандартное значение /var/www на абсолютный путь к домашней директории сайта. Выполните перезапуск веб-сервера.

На этом базовая настройка виртуальных хостов окончена.

Как все мы знаем, Apache — очень мощный, очень гибкий и настраиваемый веб-сервер для ОС *Nix . Здесь, в этом руководстве, мы собираемся обсудить еще одну особенность Apache, которая позволяет нам размещать более одного веб-сайта на одной машине с Linux. Внедрение виртуального хостинга с веб-сервером Apache может помочь вам сэкономить средства, которые вы инвестируете в обслуживание вашего сервера и его администрирование.

Концепция общего веб-хостинга и реселлерского веб-хостинга основана только на этой возможности Apache .

Типы виртуальных хостов

Существует два типа виртуального хостинга, доступных с Apache.

Виртуальный хостинг на основе имени

С помощью на основе имени вы можете разместить несколько доменов / сайтов на одном компьютере с одним IP . Все домены на этом сервере будут использовать один IP-адрес. Это легче настроить, чем виртуальный хостинг на основе IP, вам нужно только настроить DNS домена, чтобы сопоставить его с правильным IP-адресом, а затем настроить Apache для распознавания его по доменным именам.



Виртуальный хостинг на основе IP

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

Давайте настроим Виртуальный хостинг на основе имени и Виртуальный хостинг на основе IP в RHEL, CentOS и Fedora .

Тестовая среда
  1. ОС CentOS 6.5
  2. Приложение веб-сервер Apache
  3. IP-адрес 192.168.0.100
  4. IP-адрес 192.168.0.101
  5. Домен www.example1.com
  6. Домен www.example2.com

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

Перед настройкой виртуального хостинга с Apache на вашей системе должно быть установлено программное обеспечение Apache Web. если нет, установите его с помощью установщика пакета по умолчанию, называемого yum.

# yum install httpd

Настройка имени на основе виртуального хоста

Но перед созданием виртуального хоста вам необходимо создать каталог, в котором вы будете хранить все файлы вашего сайта. Итак, создайте каталоги для этих двух виртуальных хостов в папке /var/www/html . Помните, что
/var/www/html будет корневым каталогом документов по умолчанию в виртуальной конфигурации Apache.

# mkdir /var/www/html/example1.com/
# mkdir /var/www/html/example2.com/

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

# vi /etc/httpd/conf/httpd.conf

Найдите NameVirtualHost и раскомментируйте эту строку, удалив перед ней знак # .

NameVirtualHost

Затем добавьте IP-адрес, с которым вы хотите получать запросы Apache. После изменений ваш файл должен выглядеть следующим образом:

NameVirtualHost 192.168.0.100:80

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

  1. www.example1.com
  2. www.example2.com

Добавьте следующие две виртуальные директивы внизу файла. Сохраните и закройте файл.


DocumentRoot /var/www/html/example1.com
ServerName www.example1.com
CustomLog logs/www.example1.com-access_log common


DocumentRoot /var/www/html/example2.com
ServerName www.example2.com
CustomLog logs/www.example2.com-access_log common

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

# httpd -t

Syntax OK

Рекомендуется проверять синтаксис файла после внесения некоторых изменений и перед перезапуском веб-сервера, поскольку в случае неправильного синтаксиса Apache откажется работать с некоторыми ошибками и в конечном итоге повлияет на работу существующего веб-сервера на некоторое время, если «syntax OK» . Перезапустите ваш веб-сервер и добавьте его в chkconfig, чтобы ваш веб-сервер запускался на уровнях запуска 3 и 5 только во время загрузки.


Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ root @ tecmint ~] # chkconfig --level 35 httpd on

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

# vi /var/www/html/example1.com/index.html

www.example1.com


Hello, Welcome to www.example1.com.



[ root @ tecmint ~] # vi /var/www/html/example2.com/index.html

www.example2.com


Hello, Welcome to www.example2.com.



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

Http://www.example1.com http://www.example2.com

Предварительный просмотр: www.example1.com

Виртуальный хостинг: www.example1.com
Виртуальный хостинг: www.example2.com

Настройка виртуального хостинга на базе IP Linux

Чтобы настроить виртуальный хостинг на основе IP, вы должны иметь более одного IP-адреса / порта, назначенного вашему серверу или вашему компьютеру Linux.

Это может быть одна карта NIC , например: eth0: 1 , eth0: 2 , eth0: 3 … и так далее. Можно также подключить несколько сетевых карт. Если вы не знаете, как создать несколько IP-адресов на одном сетевом адаптере , следуйте приведенному ниже руководству, которое поможет вам в создании.

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

Этот тип настройки требуется, когда веб-сайт работает с сертификатом SSL (mod_ssl ) или на разных портах и ​​IP-адресах. Вы также можете запустить несколько экземпляров Apache на одном компьютере. Чтобы проверить IP-адреса, подключенные к вашему серверу, проверьте его с помощью команды ifconfig .

Root @ tecmint ~] # ifconfig

Пример вывода
eth0 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe4c:ebce/64 Scope:Link
RX packets:17550 errors:0 dropped:0 overruns:0 frame:0
TX packets:15120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16565983 (15.7 MiB) TX bytes:2409604 (2.2 MiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1775 errors:0 dropped:0 overruns:0 frame:0
TX packets:1775 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:3416104 (3.2 MiB) TX bytes:3416104 (3.2 MiB)

Как видно из вышеприведенного вывода, два IP-адреса 192.168.0.100 (eth0 ) и 192.168.0.101 (eth0: 1 ) подключены к серверу, оба IP-адреса назначены одному физическому сетевому устройству (eth0 ).

Теперь, назначив определенный IP / порт для получения http-запросов, вы можете просто сделать это, изменив директиву Listen в файле httpd.conf .

# vi /etc/httpd/conf/httpd.conf

Ищите слово «Listen ». Вы найдете раздел, в котором написано краткое описание директивы Listen. В этом разделе прокомментируйте оригинальную строку и напишите собственную директиву ниже этой строки.

# Listen 80
Listen 192.168.0.100:80

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


ServerAdmin [email protected]
DocumentRoot /var/www/html/example1
ServerName www.example1.com
ErrorLog logs/www.example1.com-error_log
TransferLog logs/www.example1.com-access_log


ServerAdmin [email protected]
DocumentRoot /var/www/html/example2
ServerName www.example2.com
ErrorLog logs/www.example2.com-error_log
TransferLog logs/www.example2.com-access_log

Теперь, поскольку вы изменили основной файл конфигурации Apache, вам нужно перезапустить службу http, как показано ниже.

# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

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

Http://www.example1.com
http://www.example2.com

Это все, что касается виртуального хоста Apache сегодня.

Проблема виртуальных хостов становится достаточно острой, когда вам нужно создать 2 или более хостов. Для их администрирования обычным "localhost " не обойтись. С помощью виртуальных хостов и сервера Apache эту проблему вполне можно решить.

Создание виртуальных хостов Apache, это совсем несложная и быстрая работа.

Итак, вы установили и настроили Apache, как написано в статье "Настройка Apache и PHP " и получили, таким образом, директорию "C:\web_server\apache\htdocs\ " для хранения документов. Однако в интернете вы поддерживаете (или, скорее всего, будете поддерживать) несколько серверов, а Apache создал только один. Конечно, можно структуру этих нескольких серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов.

Мы создадим виртуальные хосты с использованием одного общего IP-адреса. Советую имена виртуальных хостов называть так же, как и на нынешнем Web-сервере, но только без суффикса ".net " или ".com " - это может многое упростить при программировании скриптов. Например, создадим виртуальный хост "profiphp ".

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

Создаем папку "localhost " в корневом каталоге диска (C:\localhost\ ). Далее создаем в ней каталог виртуального хоста - "profiphp " (C:\localhost\profiphp\ ). Именно в этой папке и будут содержаться файлы виртуального хоста.

Далее необходимо включить поддержку виртуальных хостов. Откройте файл "C:\web_server\apache\conf\httpd.conf " и добавьте следующие строки в самом конце файла после всех комментариев:
# localhost
NameVirtualHost 127.0.0.1
# Контейнер конфигурации виртуального хоста

# Домен по которому Вы сможете обращаться к виртуальному хосту.
ServerName localhost:80
# Папка, в которой будет корень хоста.

# Файл, в который будут записываться ошибки.

# Файл журнала доступа к хосту.


# profiphp

ServerName profiphp:80



Директива "NameVirtualHost " говорит серверу, что указанный IP-адрес может использоваться несколькими виртуальными хостами, поэтому для обработки запросов, поступающих на этот адрес, нужно использовать протокол HTTP 1.1 .

При необходимости можно добавить и другие параметры в блоки " " (например, DirectoryIndex и т.д.). Не переопределенные параметры наследуются виртуальным хостом от главного. Однако не советую злоупотреблять настройками в этих секциях - лучше сделать их в файле ".htaccess " в директории нужного хоста, так как компания, которая предоставляет настоящие виртуальные хосты в интернете, вряд ли позволит менять эти блоки.

Также следует заметить, что включить поддержку виртуальных хостов можно и другим вариантом. Для этого необходимо в файле "C:\web_server\apache\conf\httpd.conf " раскомментировать строку:
Include conf/extra/httpd-vhosts.conf И редактировать файл "C:\web_server\apache\conf\extra\httpd-vhosts.conf ", в котором прописаны все виртуальные хосты. Данный вариант более понятный, поскольку у нас есть отдельный файл с настройками виртуальных хостов. Но если виртуальных хостом немного, тогда проще добавить настройки в конфигурационный файл Apache напрямую чем подключать отдельный файл.

Если виртуальных хостов много, то работа по их конфигурированию в одном файле "httpd.conf " может осложниться. Решением этой проблемы является создание специального конфигурационного файла для каждого виртуального узла и присоединение этих файлов с помощью директивы "include ". В конфигурационные файлы помещаются только контейнер " " и директивы внутри него.

Следующий шаг создания виртуального хоста - это изменение файла "C:\WINDOWS\system32\drivers\etc\hosts " операционной системы. Откройте данный файл и добавьте в него строки:
127.0.0.1 localhost
127.0.0.1 profiphp Если у Вас уже есть запись "localhost ", то второй добавлять не нужно.

Теперь запустите сервер Apache, откройте браузер, введите в адресной строке "http://profiphp/ " и вы окажетесь в своем виртуальном хосте.

Если у вас по каким то причинам виртуальные хосты не работают, необходимо проверить файл логов, который находится по адресу: "/apache/logs/error.log ". Например, может содержаться уведомление:
AH00548: NameVirtualHost has no effect and will be removed in the next release /apache/conf/httpd.conf:553 Дело в том, что до версии Apache 2.3.11, директива NameVirtualHost должна была инструктировать сервер о конкретном IP-адресе и комбинации портов, которые могут использоваться в качестве виртуального хоста на основе имени. Версия 2.3.11 и более поздние, когда IP-адрес и комбинация портов используются на нескольких виртуальных хостах, виртуальный хост на основе имени автоматически включается для этого адреса. Поэтому в настоящее время эта директива не действует. Единственным решением данной проблемы является удаление директивы NameVirtualHost . Также необходимо заменить все значения VirtualHost :
Измененный код:

ServerName localhost:80
DocumentRoot "C:/web_server/apache/htdocs"
ErrorLog "c:/web_server/apache/htdocs/error.log"
CustomLog "c:/web_server/apache/htdocs/access.log" common

# profiphp

ServerName profiphp
DocumentRoot "C:/localhost/profiphp"
ErrorLog "c:/localhost/profiphp/error.log"
CustomLog "c:/localhost/profiphp/access.log" common

В предидущей статье мы разобрались как установить apache . Теперь давайте разберём зачем создают на apache виртуальный хост и как проводится настройка виртуальных хостов apache windows.

И так давайте разберёмся зачем нам нужен виртуальный хост. После установки apache мы можем к нему обращаться набрав в браузере localhost. А хотелось бы что бы мы могли держать на сервере несколько сайтов и обращаться к ним по отдельному url. Для этого должна быть сделана на apache настройка виртуальных хостов. Для начала создадим на пример на диске С папку "www.Zametki". В папке С:\Zametki создадим три папки conf, htdocs, logs, Errors . В папке conf создадим файл zametki.conf. Откроем файл С:\www.Zametki\conf\zametki.conf и опишем наш виртуальный хост:

#Виртуальный хост zametki <VirtualHost *:80> #Настройки сервера ServerName www.zametki ServerAlias zametki ServerAdmin webmaster@zametki #Журналы сервера ErrorLog "c:/www.Zametki/logs/error.log" CustomLog "c:/www.Zametki/logs/access.log" common #корневая папка DocumentRoot "c:/www.Zametki/htdocs" <Directory "c:/www.Zametki/htdocs"> Options Indexes FollowSymLinks AllowOverride All Order deny,allow Allow from all </Directory> </VirtualHost>

Сохраняем файл zametki.conf. Теперь нам осталось подключить его к основному файлу конфигурации сервера httpd.conf. Он находится по адресу C:\Program Files\Apache Software Foundation\Apache2.2\conf. Открываем его и для начала дописываем в самый низ файла:

NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost ServerAdmin admin@localhost </VirtualHost>

Мы создали виртуальный хост по умолчанию. Теперь подключим созданный нами хост. Пишем в тот же файл в самый низ документа:

# www.zametki Include "c:/www.Zametki/conf/zametki.conf"

Теперь нам осталось создать запись о нашем хосте в файле hosts по адресу C:\WINDOWS\system32\drivers\etc. Это будет замена DNS серверу.

//запись по умолчанию виндовс 127.0.0.1 localhost //наша запись 127.0.0.1 zametki www.zametki

Создание виртуальных папок Apache

За создание виртуальных папок у нас отвечает директива Alias. Создадим папку для хранения файлов с ошибками Apache. Добавим в файл zametki.conf в директиву <VirtualHost> … </VirtualHost> нашего виртуального хоста следующее:

# Папка с сообщениями об ошибках //назначаем алиас(псевдоним) для папки Alias /err/ "c:/www.Zametki/Errors/" <Directory "c:/www.Zametki/Errors/"> Options Indexes FollowSymLinks AllowOverride All Order deny,allow Allow from all </Directory>

Создание своих страниц с ошибками Apache

За сообщение об ошибках у нас отвечает директива ErrorDocument. Создадим в папке c:/www.Zametki/Errors/ файл например 404.html. Это будет наша html страничка, выводящаяся при ошибке сервера 404. В файл zametki.conf добавим следующие строки:

# Сообщения об ошибках ErrorDocument 404 /err/404.html

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

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

Virtual host позволяет администратору размещать несколько доменов или сайтов на одном сервере и одном ip-адресе. Это актуально для тех, кто желает размещать несколько сайтов на одном VPS.

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

В этой статье вы научитесь настраивать Virtual hosts в системе Ubuntu 16.04 и предоставлять разным пользователям различное содержимое, в зависимости от домена, который они указали в адресной строке.

Подготовка

Прежде чем начать выполнять действия, описанные в этой статье, крайне рекомендуется создать пользователя с Root-привилегиями, если вы этого еще не сделали. Как это сделать вы можете прочитать в этой статье , выполнив шаги №1-4.

Кроме того, у вас должен быть установлен веб-сервер Apache2. Если вы этого еще не сделали, установите его выполнением следующих команд:

Sudo apt-get update sudo apt-get install apache2

После выполнения вышеперечисленных шагов, мы можем начинать.

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

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

Шаг первый – Создаём дерево директорий

Первое, что вы должны сделать – это подготовить директории для ваших доменов. Корневая директория Apache находится по адресу /var/www и именно тут мы будем создавать каталоги для каждого из доменов, которые хотим использовать. В каждом из этих каталогов мы создадим папку public_html , где будем размещать файлы наших сайтов.

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

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

Красным цветом выделены домены, которые вы собираетесь обслуживать при помощи вашего VPS.

Шаг второй – назначение прав доступа

Мы создали структуру каталогов для наших доменов, но на данном этапе доступ к этим каталогам есть только у 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

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

Шаг третий – создание тестовых страниц для каждого виртуального хоста

Мы создали структуру директорий и настроили права на них. Пришло время размещать контент.
На данном этапе нам нужно будет лишь убедиться, что все правильно настроено и работает, поэтому ограничимся простенькими файлами index.html для каждого хоста.
Давайте начнем с example.com . Вы можете создать index.html и открыть его в текстовом редакторе, выполнив команду:

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

Внутри этого файла разместим небольшой html-код, благодаря которому сможем понять, что попали на нужный нам сайт. Например такой:

Добро пожаловать на Example.com !

Работает! Виртуальный хост example.com настроен правильно!

Сохраните и закройте файл.
Сделаем копию только что созданного файла, чтобы использовать её в качестве базы для аналогичного файла домена test.com:

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 Добро пожаловать на Test.com !

Работает! Виртуальный хост test.com настроен правильно!

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

Шаг четвёртый – создание конфигурационных файлов виртуальных хостов

Конфигурационные файлы виртуальных хостов – это такие файлы, в которых прописано, как должен вести себя Apache при запросах на различные домены.
По умолчанию в Apache уже существует один такой файл – 000-default.conf , мы можем воспользоваться им в качестве образца и отправной точки.
Нам предстоит скопировать 000-default.conf для первого домена, настроить его под наши нужды, после чего скопировать уже измененный файл и настроить его под второй домен, внеся небольшие поправки. Стоит отметить, что все названия конфигурационных файлов виртуальных хостов в Ubuntu должны заканчиваться на.conf

Создадим первый конфигурационный файл

Начнем с копирования файла 000-default.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

Вы должны увидеть приблизительно следующую картину (комментарии удалены из файла для повышения наглядности):

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

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

Для начала изменим параметр ServerAdmin , поместим туда адрес электронной почты, на которую администратор сайта будет получать сообщения:

ServerAdmin [email protected]

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

ServerName example.com ServerAlias www.example.com

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

DocumentRoot /var/www/example.com /public_html

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

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

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

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

Когда закончите, сохраните и закройте файл.

Шаг пятый – активация виртуальных хостов

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

Используйте инструмент a2ensite для активации ваших хостов. Пример использования:

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

После выполнения данных команд, необходимо отключить стандартный хост:

Sudo a2dissite 000-default.conf

Чтобы изменения вступили в силу, необходимо перезапустить Apache:

Sudo systemctl restart apache2

Для перезапуска вы также можете использовать другую команду:

Sudo service apache2 restart

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

Шаг шестой – настройка файла hosts (не обязательно)

Если вы настроили ваши виртуальные хосты для реально существующих доменов и настроили DNS так, чтобы запросы на домены перенаправлялись на ваш сервер, то все хорошо. Если же у вас еще нет доменов или же вы по какой-то причине пока что не хотите прицеплять их к вашему серверу, вы можете использовать файл hosts вашего локального компьютера, чтобы имитировать переход через нужный домен для проверки работы virtual host .
При выполнении описанных ниже действий запросы на определенные домены с вашего локального компьютера будут перехватываться и принудительно перенаправляться на ip-адрес вашего VPS, в обход DNS-серверов. При этом данные перенаправления будут обрабатываться исключительно для вашего локального компьютера, что очень удобно для тестирования различных систем на этапе создания сайтов, в том числе для тестирования virtual host .

Убедитесь что вы настраиваете локальный компьютер, а не VPS. У вас должны быть права администратора или вы должны знать пароль от учетной записи администратора для внесения изменений в файл hosts . Если вы используете операционную систему семейства Linux или Mac, выполните следующую команду:

Sudo nano /etc/hosts

Если вы используете операционную систему Windows, вы найдете файл hosts по адресу:

C:\Windows\System32\drivers\etc\hosts

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

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

127.0.0.1 localhost 111.111.111.111 example.com 111.111.111.111 test.com

Сохраните и закройте файл. Теперь все запросы на домены example.com и test.com будут автоматически перенаправляться на наш VPS 111.111.111.111 и обрабатываться виртуальными хостами так, как если бы мы использовали реальные домены.

Шаг седьмой – проверка работоспособности

Теперь все настроено и вы можете проверить работу Virtual hosts , введя в адресую строку вашего браузера examle.com . Если всё хорошо, вы увидите следующую страницу:

Аналогично, при запросе к домену test.com вы увидите соответствующую страницу:

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

Заключение

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

Loading...Loading...