- NGINX — создание виртуальных хостов
- Виртуальные хосты
- Установка
- Создание директории
- Создание тестовой страницы
- Настройка прав
- Установка php 5.6
- Настройка php-fpm
- Конфигурация виртуального хоста
- Настройка файла hosts
- Секреты в настройке виртуальных хостов
- Облако тегов
- Следующая статья
- Отличие MyISAM от InnoDB
- Настройка виртуального хоста Nginx — его общий (для связки Nginx-Apache)
- Как в nginx создавать виртуальные хосты
- Виртуальный хост — это…
- Создание виртуального хоста
- Предустановка
- Создание директории сайта
- Права доступа
- Создание страницы
- Создание конфигурации виртуального хоста
- Конфигурация виртуального хоста
- Активация виртуального хоста
- Перезагрузка
- Настройка локальных хостов
- Результаты
- Заключение
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»
Конфигурация виртуального хоста
И, самое главное — конфигурация виртуального хоста. Здесь важно не накосячить, а, иначе, ничего не заработает. Переходите в директорию, где они находятся:
Существует несколько вариантов создания виртуальных хостов:
- Можно под каждый конфиг создать отдельный файл. Важно только не забыть создать символьную ссылку в папке sites-enabled
- Занести все конфиги сайтов в один в файл 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, так как у каждой из этих систем хранения данных есть как плюсы, так и минусы. В этой статье я постараюсь простым языком рассказать об отличиях. Зачастую этот вопрос задается на собеседованиях, и ответ знать на него, безусловно, нужно.
Настройка виртуального хоста Nginx — его общий (для связки Nginx-Apache)
Типовой конфиг Nginx при работе в связке с Apache выглядит приведенным ниже образом:
server_name example.com;
access_log /var/log/nginx/access.log;
location / <
proxy_pass 127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
>
* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ <
root /home/website/example.com/;
>
>
Настройка виртуального хоста Nginx в примере включает кэширование и проксирование на бэкенд (Apache) на порт 8080.
Если Nginx применяется без Apache конфигурационный файл будет выглядеть иначе — такие конфигурации встречаются реже.
После этого этого нужно активировать сайт:
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
Если сайтов много гораздо удобнее делать это в цикле
Сначала переходим в каталог с файлами виртуальных хостов
Затем в цикле выполняем следующую команду:
for i in `ls` ; do ln -s /etc/nginx/sites-available/$i /etc/nginx/sites-enabled/; done
В результате все виртуальные хосты окажутся активированными, если какие-то уже были включены выведется предупреждение, но на завершении выполнения команды это не отразится
В завершение потребуется проверить получившуюся конфигурацию
И дать веб-севреру команду о необходимости перечитывания конфигов
Одной из директив приведенного конфигурационного файла включается браузерное кэширование. Сервер начинает отдавать заголовок, распознавая который, браузер кэширует информацию.
Проверить, верно ли отрабатывает директива можно используя специализированный сервис. Указывается полный URL с путем к файлу, который должен кэшироваться (обычно это изображение, CSS или JS).
Как в nginx создавать виртуальные хосты
Привет! Сегодня мы поговорим о таком нужном понятии, как виртуальные хосты (Virtual Hosts) в web-сервере nginx. В качестве примера мы будем использовать операционную систему Ubuntu. Для других Linux-систем настройка будет выглядеть очень похоже. Эта статья-инструкция будет интересна, в основном, начинающим web-мастерам и администраторам, т.к. у них чаще всего возникает данный вопрос.
Виртуальный хост — это…
Для начала давайте дадим определение виртуальному хосту. Итак, виртуальный хост — это разделение адресного пространства web-сервера, например, по имени сайта, позволяющее запускать несколько web-сайтов/приложений на одном физическом сервере. Если говорить в терминологии документации nginx, виртуальный хост также называется «Server Block», но для большего сходства с Apache я буду называть его единообразно, т.к. назначение у них одно и то же. И ещё одно соглашение — давайте то, что мы будем настраивать, для простоты называть сайтом.
Создание виртуального хоста
Многие команды в этой инструкции требуют наличия у вашего пользователя прав sudoer’а на VPS. Поэтому, если у вас их нет, настроить виртуальные хосты у вас, к сожалению, вряд ли получится.
Предустановка
Сейчас я скажу вещь, которую необходимо знать каждому! Для того, чтоб настроить виртуальный хост в nginx, вам нужен установленный на вашей машине wеb-сервер nginx. Капитан Очевидность с нами! Если nginx у вас уже установлен, можете смело пропускать этот шаг и двигаться дальше по инструкции. Если же его у вас по каким-то причинам на машине всё ещё нет, введите в консоли команду:
Опцию «-y» команде apt-get мы добавляем для того, чтоб не отвечать да-да-да на назойливые вопросы установщика, ведь мы уверены, что хотим поставить этот пакет и согласны с использованием занимаемого им места на диске. Если вы всё-таки не уверены, что со всем согласны, то не добавляйте эту опцию.
Создание директории сайта
Итак, прежде чем создавать виртуальный хост, давайте сделаем папку сайта, где разместим все файлики, с которыми будет работать наш web-сервер.
Путь к этой папке в конфигурации создаваемого хоста будет Document Root, своего рода контекстом, точкой изоляции, выше которой снаружи без предварительной настройки конфигурации подняться нельзя и относительно которой строятся пути до запрашиваемых файлов. С опцией «-p» у команды mkdir мы можем не заботиться о создании родительских директорий, они будут созданы автоматически:
Здесь мы используем реальный подтверждённый DNS домен с корректными записями, указывающими на нашу машину. Для создания виртуального хоста с незарегистрированным доменом, например, для локальной разработки, вам необходимо внести соответствующую запись в файле /etc/hosts. Подробнее об этом будет в конце статьи.
Права доступа
Сейчас права у нашей созданной папки есть только у root-пользователя. Мы должны дать права на директорию для нужного пользователя, чтоб не работать с ней постоянно в режиме супер-пользователя. Вы можете заменить пользователя «www-data», используемого ниже, на другого, но по умолчанию nginx работает от имени именно этого пользователя.
Теперь сделаем так, чтобы все пользователи могли читать наши новые файлы:
Мы подразумеваем, что работаем с VPS, на котором все пользователи ничего плохого не затевают или на котором есть только вы. Поэтому мы можем дать права 755 на папку /var/www. Если в вашем случае нельзя выдавать всем пользователям системы права на чтение этой директории, изучите вопрос с разграничением прав и настройте самостоятельно.
Теперь у вас всё с правами готово!
Создание страницы
Теперь нам необходимо разместить в нашей папке какие-нибудь статические файлы (HTML-страницы, картинки, скрипты, стили и т.д.), которые наш сервер будет раздавать. Давайте создадим HTML-страницу index.htm, которая будет на нашем сайте главной:
И добавим в него немного разметки, которая будет показываться пользователю:
Сохраняем и выходим.
Создание конфигурации виртуального хоста
Мы подошли к созданию файла конфигурации нашего нового виртуального хоста, который будет содержать всю необходимую для веб-сервера информацию о сайте.
В nginx в директории /etc/nginx/sites-available есть шаблон для создаваемых конфигураций. Давайте скопируем его для нашего сайта:
Конфигурация виртуального хоста
Откройте новый файл конфигурации и вы увидите всю необходимую информацию, которую вам следует заполнить.
Нам нужно внести изменения в текущую конфигурацию. В результате для нашего простого случая должно получиться примерно следующее:
От вас здесь требуется правильно указать путь к папке со статикой сайта и имя сервера, по которому вы будете обращаться к своему сайту. Если путь вы укажете неверно или не укажете вовсе, то вы не сможете настроить виртуальный хост. В качестве server_name вы также можете задать IP-адрес или несколько имён через пробел, по которым будет доступен хост, как мы и сделали.
Всё, с этим файлом мы закончили. Сохраняйте его и закрывайте.
Активация виртуального хоста
В nginx есть папки sites-available и sites-enabled. В первой хранятся конфигурации ВСЕХ виртуальных хостов, которые могут быть на данном сервере, а в директории sites-enabled символические ссылки на активные. Никто не запрещает в sites-enabled размещать оригинал файла конфигурации, а не ссылку, но это будет менее удобно, т.к. в случае необходимости отключения придётся либо удалять файл (тогда будет проблематично включить обратно), либо перемещать его в другую директорию (тогда мы должны помнить, куда мы перенесли). Гораздо проще грохнуть символическую ссылку!
Поэтому, теперь, чтоб активировать наш виртуальный хост, нам нужно создать символическую ссылку между директорией sites-available, где лежит наш файл конфигурации, и sites-enabled. В Apache для этого есть специальная команда a2ensite. В nginx такой команды нет, поэтому выполним следующее:
Чтобы избежать «conflicting server name error» и быть уверенным, что ваш сайт отдаёт нужную информацию, можно из числа активных хостов удалить дефолтный:
Перезагрузка
Мы уже прошли немало шагов и практически всё настроили. Давайте теперь перезагрузим наш веб-сервер, чтоб он применил новую конфигурацию, но перед этим хорошей практикой является проверка того, что всё с конфигурацией корректно и nginx её верно понимает. Для этого нужно запустить диагностику nginx следующей командой:
Такая проверка крайне необходима при конфигурации на production-серверах, чтоб не получилось так, что мы вызвали команду перезапуска nginx, а он из-за неверной конфигурации не смог запуститься, и все наши виртуальные хосты не отвечают.
Если в ответ вы получили примерно следующее:
То всё у вас хорошо и вы можете смело перезапускать сервер командой:
В противном случае вам надо посмотреть файл конфигурации хоста. Что-то вы там не так указали.
Настройка локальных хостов
Если вы указали в качестве server name IP-адрес, вы можете пропустить этот шаг, т.к. настройка локального хоста вам не нужен, ваш виртуальный хост будет работать и без него. Но, если вы хотите работать с вашим виртуальным хостом без реального доменного имени, вы можете настроить локальные хосты на вашей машине. Как я уже говорил выше, это очень удобно, например, при разработке. Я могу создать mysite.dev, и на нём будет крутиться локальная нестабильная версия сайта. Для MacOS и Linux-систем надо выполнить следующую команду:
Если вы работаете под Windows, то файл с локальных хостов должен лежать примерно по этому пути C:\Windows\System32\drivers\etc\hosts.
Добавляем запись о новом локальном хосте в файл. В нашем случае нужно добавить две записи, т.к. в server_name мы указали два домена.
Теперь до тех пор, пока эта запись не будет удалена, обращения по адресу mysite.ru будут получать информацию о данном хосте из этого файлика и перенаправлять вас к вашему удаленному серверу. Если сервер развернут локально, нужно написать вместо «12.34.56.789» «127.0.0.1».
Хорошая практика — во избежание будущих проблем удалять записи хостов после того, как они выполнили свою задачу.
Результаты
Теперь мы можем посмотреть результаты наших трудов! Вводим в браузере адрес http://mysite.ru или http://www.mysite.ru и любуемся созданной нами главной страницей из index.htm. Оба адреса должны показывать нашу главную страницу. Вот и всё! Наш виртуальный хост прекрасно работает.
Если тебя заинтересовал вопрос более сложной настройки nginx, то можете почитать статью про синтаксис location в nginx с примерами.
Заключение
Спасибо, что дочитали статью до конца! Если тебе понравилась эта инструкция, не забудь поделиться ссылкой со всеми неравнодушными к данной теме, написать комментарий с отзывом и просто полистать другие статейки моего блога Если после выполнения инструкции у тебя что-то не получилось, пиши в комментариях, попробуем разобраться вместе.