Nginx настройка виртуальных хостов

Всем привет! Сегодняшний урок посвящен теме,без которой практически невозможно начать разработку сайта — это настройка web-сервера и виртуальных хостов. В качестве операционной системе мы будем использовать Ubuntu, а web-сервера — nginx.

Виртуальные хосты

Для начала нужно разобраться, что из себя представляет виртуальный хост. Это адресное пространство веб-сервера. Оно нужно для того, чтобы пользователь мог создавать несколько сайтов на своем сервере. Выглядит это примерно так: предположим у вас есть блог, интернет-магазин, сайт-визитка, корпоративный портал. Вы можете создать разные виртуальные хосты под каждый сайт, например: local.blog, local.shop, local.vizitka, local.korp-portal.

Установка

Сначала давайте убедимся, установлен ли у вас nginx и какой он версии. Для этого нужно ввести команду:

Если у вас nginx установлен, то ответ будет примерно такой:

nginx version: nginx/1.10.1

Если же ответа не последовало, то, в таком случае, его придется установить. Делается это с помощью следующей команды:

опцию "-y" мы используем, чтобы ответить на все вопросы "да", и установка сразу же началась.

Создание директории

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

Обратите внимание на ключ "-p". Это означает следующее: если нет родительской папки, то он ее создает автоматически. Название "mysite.ru" выбрано не случайно. Здесь мы используем реальное доменное имя, и в дальнейшем сможем понимать, где какой сайт находится.

Создание тестовой страницы

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

Внутри редактора, чтобы сохранить файл, нажмите комбинацию "ctrl+o" (буква "о" Олег). Чтобы выйти "ctrl+x"

теперь наполним файл текстом, скопируйте html код:

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

Скорее всего, после создания папок у вашего сервера не будет доступа на запись в них данных. Очень часто различные CMS или фрэймворки используют системы кэширования и логирования, которые пишут данные в файлы. Если у сервера будут проблемы с правами, то он будет выдавать ошибки, что, согласитесь, не есть хорошо. Чтобы разрешить проблему с правами, нужно поменять пользователя папки, ведь ее мы создавали от пользователя root, а nginx работает от пользователя www-data, чтобы изменить пользователя папки выполним следующую команду:

Ключ "-R" означает, что мы выполняем команду рекурсивно на все вложенные папки, что в данном случае очень логично. Бывают еще ситуации, когда нужно дать права на чтение (при моем варианте это не пригодилось), но на всякий случай:

Вообще, тему с правами на папки я бы советовал почитать отдельно, так как от этого напрямую зависит безопасность сервера. Зачастую хватает просто смены пользователя на папку, а все права внутри приложения (если вы используете готовое коробочное решение) уже давно разрулены.

Установка php 5.6

Пройдя все этапы выше, переходим к установке php. Для начала убедимся, что данной версии у нас нет. Переходим в папку по адресу:

Посмотрите, если видите следующую картину:

И папка 5.6 не пустая, значит php5.6 версии у вас уже установлена. И устанавливать ее заново уже не нужно. Если же ее нет, то установить можно с помощью следующих команд:

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

Настройка php-fpm

FastCGI Process Manager, "Менеджер процессов FastCGI". Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов. Настройка fpm делается в файле по следующему адресу:

Чтобы воспользоваться поиском в nano, нужно нажать комбинацию горячих клавиш "ctrl+w"

Конфигурация виртуального хоста

И, самое главное — конфигурация виртуального хоста. Здесь важно не накосячить, а, иначе, ничего не заработает. Переходите в директорию, где они находятся:

Существует несколько вариантов создания виртуальных хостов:

  1. Можно под каждый конфиг создать отдельный файл. Важно только не забыть создать символьную ссылку в папке sites-enabled
  2. Занести все конфиги сайтов в один в файл default, и каждый виртуальных хост хранить в конструкции server <> server <> server <>

Мне нравится вариант 2. Все изменения делаем в файле default. Зайдя в этот файл, вы вероятнее всего уже увидите закомментированный кусок кода ниже, начинающийся со слова server . Вы можете либо создать новый хост ниже, либо заменить этот текст. Обязательно сделайте все по инструкции и обратите внимание на важные моменты, и я уверен, у вас все получится. Это оффициальная рекомендуемая конфигурация для настройки под фрэймворк yii2 (но я немного изменил под свои нужды), найти оригинал можно тут: https://github.com/nginx-configuration

В данной настройке нужно обратить внимание на следующие поля:

  • server_name — это доменное имя, после ввода которого в адресную строку, пользователь сможет получить информацию из папки root, о ее настройке ниже
  • root — это директория, в которой хранится сайт
  • access_log и error_log — это логирование всех заходов и ошибок на сайте. Мы указываем путь до файлов
  • fastcgi_pass — Задаёт адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или IP-адреса, порта.

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

После того, как все заполнено, вам нужно перезагрузить сервер и fpm. Делается с помощью следующих команд:

Если во время перезагрузки произошли какие-нибудь ошибки, то можно запустить команду проверки nginx:

В случае успеха должно быть выдано следующее сообщение:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если же какие-то ошибки, то нужно внимательно почитать ее текст и разобраться. Вероятнее всего, с первого раза сервер запустить не удасться, но если же вам удалось, то вы везунчик 🙂

Настройка файла hosts

Теперь остался последний момент. Если вы сейчас введете в адресной строке mysite.ru, то, вероятно, получите ошибку. Но, если настроить файл hosts и указать, что по этому домену он должен отправляться на наш сервер, то сайт заработает. Для этого откроем файл:

В этом файле вы увидите примерно следующее:

Нам сюда нужно добавить еще одну строчку:

Обязательно обратите внимание, что между IP адресом и Доменным именем должна быть табуляция , а не пробел

Теперь можете попробовать зайти на ваш сайт по новому адресному имени http://mysite.ru и получите такую долгожданную фразу — "Ура! Вы смогли настроить Virtual Host в nginx!"

Секреты в настройке виртуальных хостов

Есть одна хитрость, которую я очень часто использую при создании сайтов. Чтобы все ваши сайты лежали в домашней директории пользователя, можно создать там папку, например: www. Получится что-то следующее: /home/mylocalComputer/www/mysite.ru

Чтобы эта папка заработала, нужно создать символьную ссылку на нее:

Теперь пользователь может управлять сайтами из своей домашней директории.
Опция "-s" — позволяет нам создать символическую ссылку.

В общем, что знал — рассказал. Если у вас остались вопросы — задавайте их в комментариях. Спасибо за прочтение. Надеюсь у вас все получилось 🙂

Облако тегов

Следующая статья

Отличие MyISAM от InnoDB

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

Будем работать под учетной записью обычного пользователя с sudo правами. Так же вам понадобится установленный веб-сервер Nginx. При желании можно установить полностью LEMP (Linux, Nginx, MySQL и PHP). Чтобы установить Nginx достаточно выполнить следующую команду:

Прежде чем продолжить читать статью, настоятельно рекомендуем выполнить вышеописанные условия. Для примера, мы настроим два домена на нашем сервере. Их имена — example.com, test.com. Если в наличии у вас нет двух свободных имен, то просто придумайте два, а позднее мы покажем как настроить ваш локальный сервер, чтобы проверить их работоспособность.

Шаг 1 — настройка новой корневой директории

По-умолчанию на вашем Nginx сервере активирован только один виртуальный хост. Он работает с документами по адресу: /usr/share/nginx/html . Мы изменим эту настройку, так как чаще всего приходится работать с каталогом /var/www . Nginx не использует эту директорию по-умолчанию, так как это противоречит политике Debian по использованию пакетов в каталоге /var/www .

Но так как мы простые пользователи, и с вопросами хранения пакетов редко сталкиваемся, проигнорируем эту политику и установим этот каталог в качестве корневого. Точнее говоря, каждый каталог внутри корневой директории должен соответствовать отдельному сайту. А все файлы сайта разместим в директории /var/www/site_name/html . Сначала создадим все необходимые подкаталоги. Для этого выполним следующую команду:

Флаг -р указывает оболочке, чтобы она создавала новые каталоги если их не существует в указанном пути. Теперь передадим права на этот каталог обычному пользователю. Воспользуемся переменной окружения $USER , чтобы не вводить имя своего аккаунта. После этих действий мы сможем создавать в каталоге /var/www/ файлы, а посетители сайта — нет.

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

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

Шаг 2 — Создаём шаблон страницы для каждого сайта

Давайте создадим страницу, которая будет отображаться по-умолчанию при создании нового сайта. Создайте файл index.html в каталоге первого домена:

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

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

Внесём в него небольшие изменения:

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

Шаг 3 — создание файлов виртуальных хостов для каждого домена

Теперь у нас есть содержимое для каждого сайта, настало время создать виртуальный хосты (точнее в Nginx они называются server block, но мы будет пользоваться термином виртуальный хост). По-умолчанию, Nginx использует один виртуальный хост под названием default. Используем его в качестве шаблона для нашей конфигурации. Сначала проработаем настройку для первого домена, которую потом просто скопируем и внесем минимальные изменения для второго домена.

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

Как я уже сказал, скопируем файл настройки default:

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

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

Для начала разберемся с директивой listen . Только одному блоку server мы можем установить значение default_server . Блок с таким значением будет обслуживать запросы, если не было найдено подходящего блока (блок — это всё что находится в server). Мы отключим эту директиву в виртуальном хосте default , чтобы использовать default_server на одном из наших доменов. Я оставлю эту функцию активированной для первого домена, но при желании вы можете её перенести на второй.

Следующее что мы сделаем — настроим корневой каталог при помощи директивы root . Она должна указывать на каталог, где лежат все документы вашего сайта:

Заметка: каждая инструкция Nginx должна заканчиваться символом “;”.

Далее настроим server_name , эта директива должна соответствовать первому доменному имени. Добавим также псевдоним:

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

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

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

Для этого просто скопируем файл настроек для первого сайта:

Откройте этот файл с правами администратора

В этом файле также начнем с директивы listen . Если опцию default_server вы оставили в первом файле, то здесь её следует удалить. Также необходимо убрать опцию ipv6only=on, так как её указывают только для одной комбинации адрес/порт:

Установите корневой каталог для второго сайта:

Теперь укажем server_name для второго домена:

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

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

Шаг 4 — активация виртуальных хостов и перезапуск Nginx

Мы настроили наши виртуальные хосты, теперь настало время активировать их. Для этого надо создать символические ссылки на эти файлы и положить их в каталог sites-enabled , которые Nginx считывает при запуске. Создать ссылки можно следующей командой:

Теперь Nginx обработает эти файлы. Но виртуальный хост default , также активирован, поэтому мы получим конфликт параметра default_server . Отключить эту настройку можно просто удалив ссылку на файл. Сам файл останется в каталоге sites-available , так что при необходимости мы всегда сможем вернуть его на место.

Осталось ещё одна настройка, которую требуется выполнить в конфигурационном файле Nginx. Откройте его:

Надо снять комментарий с одной из строк:

Эта директива применяется когда задано большое число имён серверов, либо заданы необычно длинные имена. Например, если значение по умолчанию равно 32 и имя сервера задано как “too.long.server.name.example.org”, то nginx откажется запускаться и выдаст сообщение об ошибке:

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

Ваш сервер теперь должен обрабатывать запросы к обоим доменам.

Шаг 5 — Настройка локального файла hosts (дополнительно)

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

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

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

Если же вы пользуетесь Windows, то инструкции по этой ОС вы найдете на официальном сайте производителя (или в google). Вам необходимо знать открытый IP адрес вашего сервера и доменные имена, которые вы хотите привязать к нему. Допустим мой адрес 111.111.111.111 , тогда мне надо добавить следующие строки в файл hosts :

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

Шаг 6 — Проверка

На данном этапе вы должны получить полностью рабочую настройку. Осталось только её проверить. Для этого перейдем в браузере по адресу: http://example.com < :target="_blank" >. Если оба сайта отображаются корректно, то вас можно поздравить с полной настройкой сервера Nginx. На этом этапе, если вы вносили изменения в файл hosts , то их следует удалить т.к. проверка прошла успешно и они уже не нужны. Чтобы открыть доступ к сайтам для интернет пользователей, придется приобрести доменные имена.

Заключение

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

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

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

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

Вообще, у Nginx только один конфигурационный файл — это /etc/nginx/nginx.conf. Все остальные файлы из папки /etc/nginx/* подключаются в этот файл с помощью директивы include. Поэтому теоретически все виртуальные хосты или только часть из них могут быть размещены в этом файле. Однако так делать не рекомендуется.

Для этого уже существует папка /etc/nginx/sites-available/ и /etc/nginx/sites-enabled. Первая просто содержит файлы конфигурации, в каждом из которых находится отдельный виртуальный хост. Вторая папка содержит ссылки на файлы из /etc/nginx/sites-available и подключена к основному конфигурационному файлу. Даже если в вашей системе пока такая структура не используется, я рекомендую её создать, чтобы в конфигурации всегда был порядок.

1. Синтаксис виртуального хоста

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

server <
listen ip_адрес:порт;
server_name доменные_имена;
root /путь/к/файлам/сайта/;
index index.php index.html;
.
location / <>
.
>

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

  • listen — указывает на IP-адрес и порт, на котором программа будет ожидать соединения от этого сайта. Чтобы выбрать любой IP-адрес, можно указать звёздочку, а порт указывать обязательно. Также в этой строке можно добавить параметр default_server, тогда этот виртуальный хост будет использоваться по умолчанию;
  • server_name — доменные имена, на которые будет отзываться этот хост. При отправке запроса на сервер, браузер указывает, к какому домену он обращается. Nginx анализирует этот параметр и выбирает необходимый виртуальный хост. Чтобы обрабатывать все домены, используйте символ подчеркивания _;
  • root — путь к файлам сайта, которые будут открываться при запросе к этому виртуальному хосту. У Nginx должен быть доступ на чтение ко всем папкам по этому пути;
  • index — файлы, которые будут открываться, если адрес файла не указан в URL;
  • location — это набор правил обработки путей в url. Каждый location может содержит путь URL а внутри него можно настроить открытие другого файла, аутентификацию, запрос к другому серверу и другие подобные вещи. Nginx анализирует все location в конфигурационном файле и выбирает самое подходящее. Из этого правила есть одно исключение. Если несколько location содержат регулярные выражения, то для обработки будет выбран первый подходящий.

2. Виртуальный хост по умолчанию

Теперь разберём создание виртуальных хостов nginx на примере. Давайте создадим виртуальный хост, который будет обрабатывать все необработанные запросы:

sudo vi /etc/nginx/sites-available/000-default.conf

server <
listen *:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.html index.htm;
location / <>

Все директивы, которые используются в блоке server, могут использоваться и в блоках location. Но нам не обязательно указывать root и index в каждом location. Если их опустить, то будут наследоваться те, которые были указаны в родительском блоке. Блоки server ведут себя аналогичным образом, поэтому, если мы не укажем другой путь к access.log, то будет использоваться путь, указанный в /etc/nginx/nginx.conf и так далее.

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

sudo ln -s /etc/nginx/sites-available/000-default.conf /etc/nginx/sites-enabled/000-default.conf

Затем убедитесь, что файлы из этого каталога подключены в основном конфигурационном файле:

sudo vi /etc/nginx/nginx.conf

Затем выполните эту команду, чтобы убедится, что вы не допустили ошибок:

Далее перечитайте конфигурацию nginx:

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

2. Виртуальный хост с доменом

Аналогичным образом можно создать виртуальный хост для домена. Например example.ru:

sudo vi /etc/nginx/sites-available/example.conf

server <
listen *:80;
server_name example.ru;
root /usr/share/nginx/html;
index index.html index.htm;
location / <>
>

Если вы работаете на локальной машине и доступа к DNS выбранного домена у вас нет, то надо добавить его IP в файл /etc/hosts:

sudo vi /etc/hosts

Повторите процедуру активации домена, и затем в браузере при запросе к домену example.ru откроется стартовая страница Nginx. Если по каким-либо причинам виртуальный хост Nginx не работает, вы можете посмотреть полный скомпилированный файл nginx.conf:

Также можно проверить, есть ли в нём конфигурация нужного хоста, например, ищем упоминания example.ru:

nginx -T | grep example.ru

3. Отключение виртуального хоста

Благодаря структуре директорий, которую мы использовали, будет довольно просто отключить ненужный хост. Все наши виртуальные хосты Nginx находятся в папке /etc/nginx/sites-available, а в активной папке только ссылки на эти файлы. Поэтому для удаления достаточно удалить на него ссылку из папки /etc/nginx/sites-enabled/:

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

Выводы

В этой статье была рассмотрена настройка виртуальных хостов Nginx. Как видите, всё довольно просто и очень удобно, особенно, если вам нужно иметь несколько сайтов на одной машине. Конечно, у Nginx нет таких удобных утилит для активации сайтов, как в Apache, но работать вполне можно.

Оцените статью
Много толка
Добавить комментарий