Nginx: Настройка блоков server в Ubuntu 14.04 LTS
Ubuntu, VPS | Комментировать запись
Блоки server в Nginx – это то же самое, что и виртуальные хосты в Apache. Эти блоки используются для обслуживания нескольких доменов на одном сервере.
Данное руководство покажет, как настроить блоки server в Nginx на сервере Ubuntu 14.04.
Требования
Для работы понадобится учётная запись пользователя с привилегиями sudo. Чтобы создать такого пользователя, читайте статью «Начальная настройка сервера Ubuntu 14.04».
Также нужно предварительно установить веб-сервер Nginx. Чтобы получить инструкции по установке стека LEMP (одним из компонентов которого является Nginx), читайте данную статью. Чтобы установить только Nginx, используйте команды:
sudo apt-get update
sudo apt-get install nginx
Кроме того, нужно установить два доменных имени; в руководстве используются условные домены example.com и test.com. Не забудьте заменить их своими доменными именами.
Если у вас нет доменных имён, которые можно использовать для тестирования настроек, укажите фиктивные домены. В руководстве есть специальный раздел, объясняющий, как протестировать сайты при помощи локальной машины.
1: Каталоги Document Root
По умолчанию Nginx поддерживает в Ubuntu 14.04 один стандартный блок server, который обслуживает документы из каталога /usr/share/nginx/html.
Стандартный блок использовать не рекомендуется, поскольку файлы сайта лучше хранить в каталоге /var/www. Пакет Nginx для Ubuntu не использует /var/www, так как этот каталог является стандартным document root согласно политике Debian.
Однако такое поведение можно изменить, задав document root для Nginx. Для этого нужно создать отдельный каталог для каждого сайта в каталоге /var/www, а в каждом таком каталоге создать каталог html для хранения файлов сайта.
Итак, для начала создайте все необходимые каталоги. Используйте следующую команду; флаг –p создаст все необходимые родительские каталоги .
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html
Создав все необходимые каталоги, передайте права на них постоянному пользователю. Используйте переменную окружения $USER, чтобы задать текущего пользователя. Это позволит создавать файлы в этих каталогах, но отнимет у посетителей право на запись.
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html
Теперь права на эти каталоги установлены верно, если ранее значение umask не было изменено. Это можно проверить при помощи команды:
sudo chmod -R 755 /var/www
Структура каталогов готова.
2: Создание страниц для сайтов
Создав необходимую структуру каталогов, можно переходить к созданию стандартных страниц сайтов, чтобы иметь возможность просмотреть контент сайта.
Создайте страницу index.html для первого сайта.
nano /var/www/example.com/html/index.html
В этот файл вставьте следующий код; эта простая базовая страница сообщит, какой из двух сайтов открыт.
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
Сохраните файл и закройте его.
Файл для второго сайта будет почти таким же, потому можно просто скопировать только что созданный файл, а затем отредактировать его.
cp /var/www/example.com/html/index.html /var/www/test.com/html/
Теперь можно открыть файл в текстовом редакторе и заменить соответствующие данные данными о втором сайте.
nano /var/www/test.com/html/index.html
<html>
<head>
<title>Welcome to Test.com!</title>
</head>
<body>
<h1>Success! The test.com server block is working!</h1>
</body>
</html>
Сохраните и закройте файл.
Теперь стандартные страницы сайтов готовы.
3: Создание блоков Server
Итак, теперь файловая структура и страницы, обслуживающие контент, готовы к работе. Приступайте к созданию блоков server для Nginx.
По умолчанию Nginx содержит один блок server по имени default, который можно использовать в качестве шаблона.
Блок server для первого сайта
Итак, скопируйте стандартный файл, чтобы создать первый блок server.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
Откройте только что скопированный файл в текстовом редакторе с привилегиями root:
sudo nano /etc/nginx/sites-available/example.com
Не учитывая закомментированных строк, этот файл выглядит так:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
Для начала нужно разобраться с директивами listen. Спецификация default_server может быть действительна только для одного блока server. Она указывает, какой из блоков должен обслуживать запрос, если запрашиваемый server_name не совпадает ни с одним из существующих блоков server.
Поскольку стандартный блок server (который сейчас содержит эту настройку) будет отключён, опцию default_server можно поместить в любой другой блок. В данном руководстве она будет размещена в блоке server первого сайта.
Далее нужно указать каталог document root, отредактировав директиву root.
root /var/www/example.com/html;
Примечание: Каждый оператор Nginx должен оканчиваться символом точки с запятой.
Затем нужно отредактировать server_name, указав доменное имя (в данном случае – домен первого сайта). Также можно добавить несколько псевдонимов (например, www.example.com):
server_name example.com www.example.com;
После внесения всех необходимых изменений данный файл будет иметь такой вид:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
Сохраните и закройте файл.
Блок server для второго сайта
Итак, базовый код блока server готов. Файл блока server можно использовать в качестве шаблона для блока второго сайта. Скопируйте этот файл:
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com
Откройте новый файл с привилегиями root:
sudo nano /etc/nginx/sites-available/test.com
В новом файле снова нужно уделить внимание директивам listen. Если опция default_server была включена в предыдущий файл, удалите её из этого файла. Также нужно избавиться от опции ipv6only=on, поскольку она может использоваться только один раз для комбинации адрес/порт:
listen 80;
listen [::]:80;
Отредактируйте директиву root, указав соответствующий каталог для второго сайта:
root /var/www/test.com/html;
Затем укажите домен и псевдонимы второго сайта в server_name:
server_name test.com www.test.com;
Файл блока server для второго сайта должен иметь такой вид:
server {
listen 80;
listen [::]:80;
root /var/www/test.com/html;
index index.html index.htm;
server_name test.com www.test.com;
location / {
try_files $uri $uri/ =404;
}
}
Сохраните файл и закройте его.
4: Активация блоков server
Теперь блоки server готовы, но их нужно активировать.
Для этого нужно создать символьные ссылки из этих файлов в каталог sites-enabled, который читается веб-сервером Nginx во время запуска.
Для этого просто используйте:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
Теперь эти файлы в каталоге sites-enabled. Однако стандартный файл блока, который был использован как шаблон, на данный момент также включён, и он будет конфликтовать с параметром default_server в одном из новых блоков.
Потому его нужно отключить. Для этого нужно удалить символьную ссылку. Этот файл всё ещё будет доступен в каталоге sites-available, но веб-сервер не будет читать его.
sudo rm /etc/nginx/sites-enabled/default
Также нужно отредактировать одну настройку в конфигурационном файле Nginx. Откройте его:
sudo nano /etc/nginx/nginx.conf
Нужно раскомментировать эту строку:
server_names_hash_bucket_size 64;
Теперь можно перезапустить Nginx, чтобы обновить настройки.
sudo service nginx restart
Готово! Веб-сервер Nginx поддерживает два отдельных сайта.
5: Настройка локальных хостов (опционально)
Если вместо настоящих доменных имён вы использовали фиктивные имена, вы можете испытать новые виртуальные хосты, не подключаясь при этом к доменному имени. Для этого нужно настроить на компьютере локальные хосты.
Это не позволит другим посетителям просматривать сайт, но даст вам возможность проверить работу и настройки каждого сайта. Этот метод работает путем перехвата запросов, которые, как правило, поступают в DNS для разрешения доменных имен. Вместо этого можно указать IP-адреса, которые будут использоваться локальным компьютером, при поступлении запросов к доменным именам.
Примечание: Прежде чем приступить к выполнению данного раздела, убедитесь, что вы находитесь на компьютере, а не на сервере. Для выполнения данного раздела нужно иметь root-права и состоять в административной группе, чтобы иметь возможность редактировать системные файлы.
В системах Mac или Linux войдите как root-пользователь (su) и откройте файл hosts:
sudo nano /etc/hosts
При использовании Windows обратитесь к сайту Microsoft.
На данном этапе понадобится внешний IP-адрес и домены, которые нужно направить на сервер. Допустим, внешний IP-адрес сервера 111.111.111.111; в таком случае строки будут выглядеть так:
127.0.0.1 localhost
127.0.0.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com
Это будет перехватывать запросы к example.com и test.com и передавать их на сервер.
6: Результаты
Теперь нужно протестировать работу блоков server. Для этого посетите домены в браузере:
http://example.com
На экране появится сообщение:
Success! The example.com server block is working!
Посетите второй домен:
http://test.com
На экране должно появиться сообщение:
Success! The test.com server block is working!
Если веб-сервер ответил на запросы, значит, всё работает должным образом.
Если файл hosts на локальном компьютере был отредактирован, на этом этапе нужно удалить добавленные в него строки.
Количество блоков server, которое можно разместить на одном сервере, ограничивается только ресурсами самого сервера. Чтобы добавить новый блок server, просто повторите весь вышеописанный процесс.
Tags: Cloud Server, NGINX, Server Block, Ubuntu 14.04, Ubuntu 14.04 LTS