Для работы нескольких сайтов на одном сервере Linux требуется создать так называемые виртуальные хосты. Данная настройка заключается в том, чтобы по доменному имени сервер мог определить, в какой папке ему следует искать запрашиваемые скрипты и/или документы. В этой статье рассмотрим минимальный конфигурационный файл веб-сервера NGiNX, работающей в качестве прокси-сервера для другого веб-сервера — Apache. Основной шаблон NGiNX рассмотрен в → этой статье.
Пример минимального конфигурационного файла виртуального хоста NGiNX для настройки работы домена в связке Apache + NGiNX
Сразу приведу готовый листинг, а ниже разберу его построчно:
server {
listen 80;
server_name amorale.club;
root /var/www/amorale/data/www/amorale.club;
charset utf-8;
access_log /var/www/amorale/data/www/logs/amorale.club.access-nginx.log main;
error_log /var/www/amorale/data/www/logs/amorale.club-nginx.error.log error;
index index.html index.htm index.php;
include /etc/nginx/templates/apache24.conf;
include /etc/nginx/templates/phpmyadmin.conf;
}
server {
listen 80;
server_name www.amorale.club;
rewrite ^(.*) http://amorale.club permanent;
}
В этом примере есть два блока server {...}
. Это связано с редиректом www
на доменное имя без www
, но обо всём по порядку. Сначала рассмотрим первый блок server
.
Порт виртуального сервера NGiNX
Запись listen 80;
указывает то, что запрос на этот хост будет ожидаться на 80-й порт. (IP сервера задаётся более глобально в настройках операционной системы.)
Доменное имя виртуального хоста NGiNX
Запись server_name
задаёт доменное имя виртуального хоста, настраиваемого в данном конфиге NGiNX.
Если доменных имён несколько, их можно перечислить через пробел. Тогда сервер будет отдавать одинаковый контент на запросы с разными доменными именами.
Если требуется, чтобы при запросах на разные доменные имена, например, с www
и без www
отдавались ответы только с одного доменного имени (главного зеркало), то требуется создать для каждого зеркала свой блок server
и прописать правила редиректа. Именно это и сделано в приведённом конфиге, где во втором блоке server
прописано правило перезаписи (удаления www
) доменного имени в запросе директивой rewrite
.
Надеюсь, теперь понятно, зачем в конфиге виртуального хоста могут присутствовать несколько блоков server
.
Место на диске, где расположены файлы и скрипты виртуального хоста NGiNX
Директивой root
задаётся путь до папки, в которой лежат документы, доступные для данного хоста. Проще говоря, это путь до папки с файлами сайта на сервере.
Логи работы сервера NGiNX (логи доступа и логи ошибок)
Следующие две директивы access_log ... main
и error_log ... error
задают имена файлов с логами доступа и логами ошибок, и путь к этим файлам. По указанному пути все папки должны быть созданы и присутствовать. NGiNX не создаёт сам эти пути, если они прописаны в настройках виртуального хоста. Если путь для файла лога не может быть достигнут (не хватает прав или папка отсутствует), NGiNX будет ругаться, выдавать ошибку и отказываться запуститься.
Файлы логов создаются автоматически с тем именем, которое указано в этом конфиге. Поэтому тут — полный простор для полёта фантазии админа. =D
Индексные файлы (стартовые) для папок виртуального хоста NGiNX
Директивой index задаются индексные файлы виртуального хоста. То есть, если явно не указан файл, но он находится в папке, то он будет отдан пользователю в качестве результата запроса. Индексных файлов может быть несколько. Тут важна последовательность. Согласно последовательности, пользователю будет отдаваться первый встретившийся в папке индексный файл. Если индексного файла в папке нет, то отработает директива настроек сервера (либо доступ запрещён, либо будет выведен список папок и файлов, расположенных по запрашиваемому адресу).
Дополнительные файлы настроек виртуального хоста NGiNX
Директивой include
подключаются файлы с дополнительными настройками. В указанном примере, это файл apache24.conf
с правилами подключения Apache, которому переадресуются все запросы с расширениями, не указанными в настройках nginx.conf (в нашем случае, .html
, .htm
, .php
, .cgi
, .pl
и т.д.). То есть те, для обработки которых, в отличие от NGiNX, Apache наиболее подходит. И файл phpmyadmin.conf
с настройками работы phpMyAdmin через браузер.
Резюме
Вместо домена amorale.club
нужно прописать свой домен... Ну и пути тоже должны совпадать с реальными путями к файлам и папкам на рабочем сервере.
В основном конфиге NGiNX (файл nginx.conf
) принято инклюдить папки с конфигами виртуальных хостов. См. по ссылке запись в конце конфига: include /etc/nginx/sites-enabled/*;
.
В то время, как файлы конфигов витруальных хостов складываются в папке /etc/nginx/sites-available/
, для их подключения в работу NGiNX, нужно создать символическую ссылку в папке sites-enabled
. Для этого можно выполнить команду:
# ln -s /etc/nginx/sites-available/имя_конфига.conf /etc/nginx/sites-enabled/
Обычно имя_конфига
— это доменное имя, для настройки которого служит данный конфиг.
После того, как фонфиг создан, создана символическая ссылка на него, нужно перезагрузить NGiNX:
# service nginx reload
Если нет никаких ошибок, после рестарта NGiNX, сайт должен начать сразу отвечать по доменному имени (DNS записи которого до этого тоже должны быть правильно настроены).
P.S.
Статья про то, как создать минимальный конфиг виртуального хоста Apache 2 для настройки работы домена в связке Apache + NGiNX по → этой ссылке.
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)