Настройка виртуальных хостов nginx ubuntu
Привет! Сегодня мы поговорим о таком нужном понятии, как виртуальные хосты (Virtual Hosts) в web-сервере nginx. В качестве примера мы будем использовать операционную систему Ubuntu. Для других Linux-систем настройка будет выглядеть очень похоже. Эта статья-инструкция будет интересна, в основном, начинающим web-мастерам и администраторам, т.к. у них чаще всего возникает данный вопрос.
Создание виртуального хоста
Предустановка
Сейчас я скажу вещь, которую необходимо знать каждому! Для того, чтоб настроить виртуальный хост в nginx, вам нужен установленный на вашей машине wеb-сервер nginx. Капитан Очевидность с нами! Если nginx у вас уже установлен, можете смело пропускать этот шаг и двигаться дальше по инструкции. Если же его у вас по каким-то причинам на машине всё ещё нет, введите в консоли команду:
Создание директории сайта
Итак, прежде чем создавать виртуальный хост, давайте сделаем папку сайта, где разместим все файлики, с которыми будет работать наш web-сервер.
Права доступа
Теперь сделаем так, чтобы все пользователи могли читать наши новые файлы:
Теперь у вас всё с правами готово!
Создание страницы
Теперь нам необходимо разместить в нашей папке какие-нибудь статические файлы (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 такой команды нет, поэтому выполним следующее:
Перезагрузка
Мы уже прошли немало шагов и практически всё настроили. Давайте теперь перезагрузим наш веб-сервер, чтоб он применил новую конфигурацию, но перед этим хорошей практикой является проверка того, что всё с конфигурацией корректно и nginx её верно понимает. Для этого нужно запустить диагностику nginx следующей командой:
Такая проверка крайне необходима при конфигурации на production-серверах, чтоб не получилось так, что мы вызвали команду перезапуска nginx, а он из-за неверной конфигурации не смог запуститься, и все наши виртуальные хосты не отвечают.
Если в ответ вы получили примерно следующее:
То всё у вас хорошо и вы можете смело перезапускать сервер командой:
В противном случае вам надо посмотреть файл конфигурации хоста. Что-то вы там не так указали.
Настройка локальных хостов
Если вы указали в качестве server name IP-адрес, вы можете пропустить этот шаг, т.к. настройка локального хоста вам не нужен, ваш виртуальный хост будет работать и без него. Но, если вы хотите работать с вашим виртуальным хостом без реального доменного имени, вы можете настроить локальные хосты на вашей машине. Как я уже говорил выше, это очень удобно, например, при разработке. Я могу создать mysite.dev, и на нём будет крутиться локальная нестабильная версия сайта. Для MacOS и Linux-систем надо выполнить следующую команду:
Если вы работаете под Windows, то файл с локальных хостов должен лежать примерно по этому пути C:\Windows\System32\drivers\etc\hosts.
Добавляем запись о новом локальном хосте в файл. В нашем случае нужно добавить две записи, т.к. в server_name мы указали два домена.
Результаты
Если тебя заинтересовал вопрос более сложной настройки nginx, то можете почитать статью про синтаксис location в nginx с примерами.
Заключение
Спасибо, что дочитали статью до конца! Если тебе понравилась эта инструкция, не забудь поделиться ссылкой со всеми неравнодушными к данной теме, написать комментарий с отзывом и просто полистать другие статейки моего блога Если после выполнения инструкции у тебя что-то не получилось, пиши в комментариях, попробуем разобраться вместе.
Будем работать под учетной записью обычного пользователя с sudo правами. Так же вам понадобится установленный веб-сервер Nginx. При желании можно установить полностью LEMP (Linux, Nginx, MySQL и PHP). Чтобы установить Nginx достаточно выполнить следующую команду:
Шаг 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. Откройте его:
Надо снять комментарий с одной из строк:
Поэтому лучше увеличить это значение до 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 также называются блоками server. Эти блоки используются для обслуживания нескольких индивидуальных доменов на одном сервере.
Данное руководство покажет, как настроить виртуальные хосты Nginx на сервере Ubuntu 16.04.
Требования
- Не-root пользователь с доступом sudo (о настройке такого пользователя – в этой статье).
- Предварительно установленный веб-сервер Nginx. Инструкции по установке Nginx можно найти здесь. Чтобы установить более надёжную платформу для веб-сервера, читайте руководство «Установка стека LEMP в Ubuntu 16.04».
Если у вас нет доменных имён, которые можно использовать для тестирования настроек, укажите фиктивные домены. В руководстве есть специальный раздел, объясняющий, как протестировать сайты при помощи локальной машины.
1: Каталоги Document Root
По умолчанию в Ubuntu 16.04 включен один стандартный виртуальный хост Nginx, который обслуживает документы из каталога /var/www/html.
Для обслуживания нескольких сайтов нужно создать дополнительные каталоги. Каталог /var/www/html будет использоваться в качестве каталога по умолчанию, который будет обслуживаться, если запрос клиента не соответствует ни одному из других сайтов.
Создайте структуру каталогов в /var/www для каждого отдельного сайта. Весть текущий контент нужно поместить в каталог html. Используйте следующую команду; флаг –p создаст все необходимые родительские каталоги.
Создав все необходимые каталоги, передайте права на них текущему пользователю с доступом к sudo.
Примечание: В зависимости от требований сервера вам может потребоваться повторно настроить права доступа или права собственности на папки, чтобы разрешить доступ к пользователю www-data. В этом, как правило, часто нуждаются динамические сайты. Конечно, привилегии доступа полностью зависят от конфигурации сервера.
Используйте переменную окружения $USER, чтобы задать текущего пользователя. Это позволит создавать файлы в этих каталогах.
Теперь права на эти каталоги установлены верно, если ранее значение umask не было изменено. Это можно проверить при помощи команды:
sudo chmod -R 755 /var/www
2: Создание страниц для сайтов
Создав необходимую структуру каталогов, можно переходить к созданию стандартных страниц сайтов, чтобы иметь возможность просмотреть добавленный контент.
Создайте страницу index.html для первого сайта.
В этот файл вставьте следующий код; эта простая базовая страница сообщит, какой из двух сайтов открыт.
Сохраните и закройте файл.
Файл для второго сайта будет почти таким же, потому можно просто скопировать только что созданный файл, а затем отредактировать его.
Откройте этот файл в текстовом редакторе:
Откорректируйте данные, указав информацию о втором сайте:
Сохраните и закройте файл.
Теперь стандартные страницы сайтов готовы.
3: Создание виртуальных хостов
Итак, теперь файловая структура и страницы, обслуживающие контент, готовы к работе. Приступайте к созданию блоков server для Nginx.
По умолчанию Nginx содержит один блок server по имени default, который можно использовать в качестве шаблона.
Блок server для первого сайта
Итак, скопируйте стандартный файл, чтобы создать первый блок server.
Откройте новый файл в текстовом редакторе:
Не учитывая закомментированных строк, этот файл выглядит так:
server listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / try_files $uri $uri/ =404;
>
>
Сначала нужно разобраться с директивами listen. Спецификация default_server может быть действительна только для одного виртуального хоста. Она указывает, какой из виртуальных хостов должен обслуживать запрос, если запрашиваемый server_name не совпадает ни с одним из существующих виртуальных хостов.
Добавьте опцию default_server в директиву listen одного из своих сайтов. Также можно оставить эту опцию в файле стандартного виртуального хоста, который будет обслуживать каталог /var/www/html, если запрашиваемый хост не может быть найден.
В данном руководстве стандартный виртуальный хост будет обслуживать несовпадающие запросы, потому директиву default_server нужно удалить из него и добавить в файл другого хоста.
Примечание: Чтобы убедиться, что опция default_server включена только в одном файле виртуального хоста, введите:
grep -R default_server /etc/nginx/sites-enabled/
Если такие записи в раскомментированном виде находятся в нескольких файлах (указывается в последнем столбце), веб-сервер пожалуется на ошибку.
Далее нужно указать каталог document root, отредактировав директиву root.
Базовая настройка виртуального хоста завершена.
Блок server для второго сайта
Итак, базовый код блока server готов. Файл блока server можно использовать в качестве шаблона для блока второго сайта. Скопируйте этот файл:
Откройте новый файл с привилегиями root:
Обратите внимание на директиву listen. Если опция default_server была включена в предыдущий файл, удалите её из этого файла. Также нужно откорректировать значение директивы root (укажите document root второго сайта) и server_name (укажите доменное имя и все алиасы).
В результате файл будет выглядеть так:
Сохраните и закройте файл.
4: Включение виртуальных хостов
Теперь виртуальные хосты готовы, но их нужно активировать.
Для этого нужно создать символьные ссылки из этих файлов в каталог sites-enabled, который читается веб-сервером Nginx во время запуска.
Теперь эти файлы в каталоге sites-enabled. На данный момент у вас есть три виртуальных блока, которые смогут отвечать на запросы согласно директивам listen и server_name.
Чтобы избежать потенциальных проблем с памятью, которые могут возникнуть из-за дополнительных имён сервера, отредактируйте файл /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
Найдите директиву server_names_hash_bucket_size и раскомментируйте её:
Сохраните и закройте файл.
Проверьте синтаксис на наличие ошибок:
Если ошибок нет, перезапустите Nginx, чтобы обновить настройки:
sudo systemctl restart nginx
Теперь Nginx обслуживает два домена.
5: Настройка локальных хостов (опционально)
Если вместо настоящих доменных имён вы использовали фиктивные имена, вы можете испытать новые виртуальные хосты, не подключаясь при этом к доменному имени. Для этого нужно настроить на компьютере локальные хосты.
Это не позволит другим посетителям просматривать сайт, но даст вам возможность проверить работу и настройки каждого сайта. Этот метод работает путем перехвата запросов, которые, как правило, поступают в DNS для разрешения доменных имен. Вместо этого можно указать IP-адреса, которые будут использоваться локальным компьютером, при поступлении запросов к доменным именам.
Примечание: прежде чем приступить к выполнению данного раздела, убедитесь, что вы находитесь на компьютере, а не на сервере. Для выполнения данного раздела нужно иметь root-права и состоять в административной группе, чтобы иметь возможность редактировать системные файлы.
В системах Mac или Linux войдите как root-пользователь (su) и откройте файл hosts:
sudo nano /etc/hosts
При использовании Windows обратитесь к сайту Microsoft.
Сохраните и закройте файл.
6: Тестирование
Теперь нужно протестировать работу виртуальных хостов. Для этого посетите домены в браузере:
Посетите второй домен:
Если веб-сервер ответил на запросы, значит, всё работает должным образом.
Если файл hosts на локальном компьютере был отредактирован, на этом этапе нужно удалить добавленные в него строки.
Количество виртуальных хостов, которое можно разместить на одном сервере, ограничивается только ресурсами самого сервера. Чтобы виртуальный хост, просто повторите весь вышеописанный процесс.
На сегодняшний день Nginx является одним из самых распространённых веб-серверов, используемым огромным количеством сайтов в интернете. Ниже, о том, как установить и настроить Nginx Server Blocks на сервере с установленной Ubuntu 20.04.
Установка Nginx
Nginx можно установить из репозиториев Ubuntu, поэтому для исталляции пакета необходимо ввести следующие команды, подключившись для этого к системе с помощью учётной записи, имеющей привилегию на запуск утилиты sudo :
Первая команда обновляет список пакетов вашей системы.
Вторая команда как раз и выполняет установку элементов сервера Nginx на вашу систему.
Настройка веб-сервера Nginx
Здесь важно понимать, что Nginx использует интерфейс межсетевого экрана Uncomplicated FireWall (UFW), поэтому первым делом нужно произвести настройку брандмауэра Ubuntu. Доступные приложения, о которых знает UFW, можно увидеть набрав в командной строке:
Не будет лишним увидеть статус UFW после произведённых манипуляций:
И, наконец, чтобы проверить статус установленного веб-сервера, используйте следующую инструкцию:
Если всё сделано верно, браузер должен показать стартовую страницу Nginx:
Настройка Nginx Server Blocks
Стоит отметить, что веб-сервер Nginx может служить хостингом не только одного, но и нескольких сайтов одновременно. Для этого необходимо создать на нём дополнительные виртуальные хосты, каждый из которых будет хранить данные своего отдельного домена.
Теперь, когда есть директория домена, в ней можно создать файл страницы сайта index.html :
Чтобы сохранить изменения и выйти из текстового редактора используйте CNTRL X , после чего Y и Enter .
Далее, в каталоге /etc/nginx/sites-available/ необходимо создать файл my-domain.host :
и скопируйте в него:
После того, как произведена замена server_name на имя вашего домена, необходимо создать ссылку в /etc/nginx/sites-enabled/ :
Также, необходимо отредактировать файл /etc/nginx/nginx.conf :
Для выявления возможных ошибок в файлах Nginx введите:
Если ошибок нет, вывод команды должен быть таким:
Следующим шагом Nginx следует перезапустить:
На этом всё. Теперь вы знаете, как настроить Nginx Server Blocks и настройка виртуальных хостов завершена. Ваш хостинг теперь успешно функционирует!
Читайте также: