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

Nginx – один из самых популярных веб-серверов в мире. Nginx отвечает за размещение и обслуживание объёмных и производительных сайтов с большой нагрузкой. В большинстве случаев Nginx легче Apache и лучше подаётся масштабированию. Кроме того, Nginx можно использовать как веб-сервер и обратный прокси.

Для управления индивидуальными настройками отдельных сайтов Nginx использует блоки server, которые принято называть виртуальными хостами (как в Apache). Виртуальные хосты позволяют размещать несколько сайтов с разными конфигурациями на одном сервере.

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

Данное руководство поможет настроить блоки server для Nginx на виртуальном выделенном сервере CentOS 7.

Требования

Для выполнения руководства понадобится:

  • Предварительно настроенный сервер CentOS 7.
  • Не-root пользователь с доступом к sudo (информацию о настройке такого пользователя можно найти здесь).

Также нужно заранее установить веб-сервер Nginx. Можно установить полный стек LEMP согласно этому руководству. Чтобы установить только Nginx, используйте yum. Сначала добавьте Nginxв список исходников системы:

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Затем при помощи yum загрузите и установите Nginx:

sudo yum install nginx

После завершения установки подключитесь как не-root пользователь при помощи SSH.

Примечание: В данном руководстве будут созданы виртуальные хосты для условных доменов example.com и example2.com. Замените их своими доменными адресами.

Если же у вас ещё нет доменных имён, вы сможете протестировать настройку при помощи фиктивных данных.

1: Структура каталогов

Для начала нужно создать структуру каталогов для хранения данных для сайтов.

Такие каталоги (каталоги верхнего уровня, в которых Nginx ищет запрашиваемый контент) называются document root. В каталоге /var/www нужно создать отдельные подкаталоги для каждого сайта. а в них – подкаталоги html для хранения файлов сайта.

Для создания каталогов используется команда mkdir, а флаг –p позволяет создать каталог с подкаталогом в нём.

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example2.com/html

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

Права доступа

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

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html

Переменная $USER автоматически задаёт имя текущего пользователя. Теперь текущему пользователю принадлежат подкаталоги public_html, в которых будет храниться контент сайтов.

Также нужно немного изменить привилегии и открыть контент для чтения (иначе страницы не будут обслуживаться):

sudo chmod -R 755 /var/www

Теперь сервер имеет необходимые права доступа и может корректно обслуживать контент в соответствующих каталогах.

2: Создание демо-страниц

Теперь нужно создать пару стандартных страниц сайтов, чтобы иметь возможность просмотреть контент.

Для тестирования подойдут и самые простые страницы. Создайте для каждого домена страницу index.html:

Чтобы создать страницу index.html для первого сайта, наберите:

nano /var/www/example.com/html/index.html

Добавьте в этот файл простой 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/example2.com/html/index.html

Откройте файл и подкорректируйте код:

nano /var/www/example2.com/html/index.html
<html>
<head>
<title>Welcome to Example2.com!</title>
</head>
<body>
<h1>Success! The example2.com server block is working!</h1>
</body>
</html>

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

3: Создание блоков Server

Итак, теперь файловая структура и страницы, обслуживающие контент, готовы к работе. Приступайте к созданию блоков server для Nginx.

Блоки server, или виртуальные хосты, помогают веб-серверу Nginx обслуживать несколько сайтов с разным контентом.

Для начала создайте каталог для хранения файлов хостов (sites-available), а также каталог, предоставляющий Nginx список хостов, которые нужно обслуживать (sites-enabled).

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

Примечание: Этот шаблон каталогов был представлен командой разработчиков Debian, но его можно использовать и в этой системе, так как он прощает процесс управления хостами.

После этого нужно сообщить , что доступные блоки server хранятся в каталоге sites-enabled. Для этого нужно отредактировать главный конфигурационный файл Nginx, добавив в него строку, сообщающую о других конфигурационных файлах:

sudo nano /etc/nginx/nginx.conf

Добавьте эти строки в конец блока http {}:

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Первая строка указывает, что виртуальные хосты находятся в каталоге sites-enabled, а вторая строка увеличивает объем памяти, выделенный для обработки доменов.

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

По умолчанию Nginx предоставляет один стандартный блок server по имени default.conf, который можно использовать в качестве шаблона для других блоков. Скопируйте его:

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/example.com.conf

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

sudo nano /etc/nginx/sites-available/example.com.conf

Примечание: Согласно требованиям все файлы виртуальных хостов Nginx должны иметь расширение .conf

Содержимое файла выглядит так (комментарии опущены для удобства):

server {
listen  80;
server_name localhost;
location / {
root  /usr/share/nginx/html;
index  index.html index.htm;
}
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  /usr/share/nginx/html;
}
}

Сначала нужно изменить директиву server_name, которая сообщает Nginx, какие запросы нужно направлять на этот виртуальный хост. В этой строке нужно указать домен (например, example.com) и псевдонимы сайта (например, www.example.com); тогда домен с префиксом www и без него будет отображать один и тот же контент.

server_name example.com www.example.com;

Примечание: Каждое выражение Nginx должно заканчиваться символом точки с запятой. В противном случае возникнет ошибка.

После этого нужно указать каталог document root; для этого существует директива root.

root /var/www/example.com/html;

Также нужно добавить команду try_files и указать, что в случае если искомый файл или каталог не найден, сервер должен вернуть ошибку 404.

try_files $uri $uri/ =404;

После внесения всех изменений файл виртуального хоста будет иметь такой вид:

server {
listen  80;
server_name example.com www.example.com;
location / {
root  /var/www/example.com/html;
index  index.html index.htm;
try_files $uri $uri/ =404;
}
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  /usr/share/nginx/html;
}
}

Базовая конфигурация хоста завершена. Сохраните и закройте файл.

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

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

sudo cp /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf

Откройте новый файл:

sudo nano /etc/nginx/sites-available/example2.com.conf

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

server {
listen  80;
server_name example2.com www.example2.com;
location / {
root  /var/www/example2.com/html;
index  index.html index.htm;
try_files $uri $uri/ =404;
}
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  /usr/share/nginx/html;
}
}

Откорректировав данные, сохраните и закройте файл.

4: Включение блоков server

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

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
sudo ln -s /etc/nginx/sites-available/example2.com.conf /etc/nginx/sites-enabled/example2.com.conf

После этого перезапустите Nginx, чтобы обновить настройки сервера:

sudo systemctl restart nginx

5: Настройка локальных хостов (опционально)

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

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

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

В системах Mac или Linux войдите как root-пользователь и откройте файл hosts:

sudo nano /etc/hosts

Пользователи Windows могут обратиться за инструкциями к сайту Microsoft.

На данном этапе понадобится внешний IP-адрес сервера и домен, который вы хотели бы использовать на сайте:

127.0.0.1   localhost
127.0.1.1   guest-desktop
server_ip_address example.com
server_ip_address example2.com

Это направит запросы к доменам example.com и example2.com на локальный компьютер и передаст их на server_ip_address.

6: Тестирование настройки

Теперь нужно проверить работу блоков server. Для этого посетите домены в браузере:

http://example.com

На экране должно появиться это сообщение:

Success! The example.com server block is working!

Аналогичным образом нужно проверить и второй домен.

Success! The example2.com server block is working!

Если все настроенные сайты отвечают на запросы, значит, настройка виртуальных хостов Nginx прошла успешно.

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

Количество блоков server, которое можно разместить на одном сервере, ограничивается только ресурсами самого сервера. Чтобы добавить новый блок server, просто повторите весь вышеописанный процесс.

Tags: ,

Добавить комментарий