В предыдущей статье был рассмотрен минимальный конфиг виртуального хоста веб-сервера NGiNX, работающей в качестве прокси-сервера для другого веб-сервера — Apache. Надо понимать, что всё это рассматривается на платформе сервера, работающего на Debian 9, но приведённые настройки должны работать на на других операционных системах. В этой статье рассмотрим минимальный файл конфигурации виртуального хоста веб-сервера Apache, в связке с рассмотренным конфигом NGiNX, данное решение позволяет поднимать большое количество сайтов (доменов) на одном рабочем сервере.
Пример минимального конфигурационного файла виртуального хоста Apache для настройки работы домена в связке Apache + NGiNX
Как обычно, сразу приведу готовое решение, потом объясню, что есть что.
Про конфигурацию и предварительную настройку Апача можно почитать пошаговую инструкцию по → этой ссылке. Это сразу позволит понять и разобраться с тем, какие настройки в систему вносятся, а также, откуда что берётся. Итак, собственно минимальный конфиг виртуального хоста веб-сервера Apache:
<VirtualHost 127.0.0.1:8080>
ServerName amorale.club
ServerAdmin root@amorale.club
ServerAlias www.amorale.club
DocumentRoot /var/www/amorale/data/www/amorale.club
CustomLog /var/www/amorale/data/www/logs/amorale.club.access-apache.log combined
ErrorLog /var/www/amorale/data/www/logs/amorale.club-apache.error.log
AssignUserID amorale amorale
AddDefaultCharset UTF-8
DirectoryIndex index.php index.html index.htm
<Directory /var/www/amorale/data/www/amorale.club>
Options +ExecCGI
</Directory>
</VirtualHost>
Как видно (или заранее известно), настройки виртуального хоста у Апача находятся внутри контейнера VirtualHost
. А теперь обо всём по порядку, согласно приведённому листингу.
IP и порт виртуального хоста Apache
В открывающем теге контейнера VirtualHost
прописывается IP и порт виртуального хоста. IP обычно выставляется тот, что соответствует localhost
, а вот порт в связке Apache + NGiNX в случае, когда Apache стоит за проксирующим NGiNX, должен быть не стандартным 80
, а тем, который прописан в системе. В нашем случае, второй порт по договорённости для http — 8080
. Так сложилось исторически. =)
В итоге получим первую строчку нашего конфига: <VirtualHost 127.0.0.1:8080>
Доменное имя виртуального хоста
Директива ServerName
служит для привязки доменного имени к виртуальному хосту. После пробела за ней нужно указать домен, который должен отвечать. Конечно, домен должен быть привязан записями DNS к данному серверу.
Контактные данные администратора виртуального хоста
Для того, чтобы было куда жаловаться, нужно после директивы ServerAdmin
указать email администратора хоста.
Дополнительные домены виртуального хоста
Снова, так сложилось исторически (и это так засело в головах, что люди до сих пор пользуются), можно задать другие доменные имена, на которые будет отзываться виртуальный хост. После директивы ServerAlias
через пробелы нужно указать эти доменные имена. www
(куда уж без него) и другие, если нужно.
Домашняя папка с файлами сайта
После директивы DocumentRoot
нужно указать путь до каталога, служащего домашней папкой сайта. Путь обычно указывается абсолютный от корня файловой системы сервера. Неизвестно, под каким пользователем будет работать Apache, хотя это можно и выяснить, но проще указать абсолютный путь — это универсальное решение и без относительности пользователя и его прав.
Файлы логов доступа и ошибок виртуального хоста
Следующие две директивы CustomLog
и ErrorLog
задают пути до файлов логов доступа и ошибок работы виртуального хоста соответственно.
Лирическое отступление
Веб-серверы Apache и NGiNX разрабатываются разными командами людей, поэтому логи этих серверов находятся в разных местах на сервере. Что, на мой взгляд, очень неудобно. Поэтому тут можно прописать ту же папку, что и в конфиге NGiNX для этих логов. Просто пометить, какому веб-серверу, какой лог соответствует. И тогда, всё будет в одном месте, и в случае необходимости, доступно в пределах одной папки (и даже упорядочено по алфавиту и следовать одно под другим в списке файлов). Удобно жешь! =D
Указание группы и пользователя для запуска процесса Apache
Для того, чтобы Апач не мог гулять по всем виртуальным хостам, а при запросе к определённому хосту мог быть ограничен только его домашней директорией, в директиве AssignUserID
прописывается группа и пользователь, под которым будет запущен Апач при обращении по заданному доменному имени.
Это позволяет свести ущерб взлома одного сайта и усложнить взлом других. Для работы директивы AssignUserID
требуется установить модуль mpm-itk к серверу Apache, но это делается предельно просто. Прочитать, о том как, можно по → этой ссылке.
Задание кодировки символов документов виртуального хоста
С кириллицей вообще, ещё тот головняк, но с введением кодировки UTF-8, жизнь стала проще. Директива AddDefaultCharset
задаёт кодировку символов в текстовых документах сервера. Для того, чтобы браузер не выдавал кракозябдиков, нужно следить за тем, чтобы все документы сервера на русском языке (кириллистические символы) были в одной кодировке, совпадающей с кодировкой по умолчанию, установленной на сервере. Если с кодировкой что-то не так, и в браузере кракозяблики, - разбирайтесь, где косяк: на сервере установлена другая кодировка, документ стырен под другой кодировкой или база данных отдаёт данные в третьей кодировке. Есть ещё html мета-тег, который тоже может задавать кодировку документа для вывода в браузере. В общем, чтобы не было головной боли, нужно выбрать кодировку раз и на всю оставшуюся жизнь сохранять ей верность в любых ситуациях. Тогда всё будет хорошо и наступит счатье. =)
Задание индексных файлов для папок на сервере
Директива DirectoryIndex
задаёт индексные файлы для папок на сервере. Если в запросе к серверу указана всего лишь папка, но в ней расположен один из указанных файлов, то именно он и будет открыт. Последовательность расположения индексных файлов в директиве DirectoryIndex
имеет принципиальное значение. В нашем примере, если в папке есть все три файла, то откроется первый, который указан (то есть index.php
). Если его нет, то сервер отдаст index.html
. Если и его нет в папке, то следующий по списку. Если список кончился, а индексный файл так и не найден, сработает следующая директива:
Задание свойств папок на сервере
Эти свойства можно перепрописать в файле .htaccess
, но если его нет или свойства не перепрописаны, то применятся те, что заданы в контейнере Directory
.
Сейчас подробно не буду останавливаться на этом (может быть напишу отдельную статью о том, как использовать данную конструкцию для правильной (безопасной и удобной) настройки папок сайта на сервере.
Резюме
Собственно всё. После этого надо не забыть закрыть контейнер виртуального хоста: </VirtualHost>
.
Надо понимать, что это минимальный джентльменский набор настроек, но он позволяет поднять виртуальные хосты Apache 2 для настройки работы домена в связке Apache + NGiNX. Ну и доменное имя нужно конечно использовать своё, а не моё amorale.club
. Пути к папкам и файлам должны существовать. Иначе рискуете нарваться на ошибку рестарта Апача.
Конфиги виртуальных хастов обычно лежат в папке /etc/apache2/sites-available
на сервере.
Для того, чтобы поднять виртуальный хост (запустить его в работу) нужно выполнить команду
# a2ensite ваш_домен.ru
Это активирует виртуальный хост, если в конфиге нет критических ошибок. То есть создаёт символьную ссылку в папке /etc/apache2/sites-enabled
на этот файл конфига.
Не уверен, что это необходимо, но я ещё и перезапускаю Апач командой:
# service apache2 reload
Если Apache рестартанул и не выдал никаких сообщений, сайт должен начать открываться в браузере по доменному имени (если у него конечно есть какие-то документы в домашней директории). =)
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)