Site icon 8HOST.COM

Nginx: Настройка блоков server в Ubuntu 14.04 LTS

Блоки 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, просто повторите весь вышеописанный процесс.