Привет, %username%
! Как известно Nginx – один из самых популярных веб-серверов в мире. Nginx отвечает за размещение и обслуживание объёмных и производительных сайтов с большой нагрузкой. В большинстве случаев Nginx легче Apache и лучше подаётся масштабированию. Кроме того, Nginx можно использовать как веб-сервер и обратный прокси.
Для управления индивидуальными настройками отдельных сайтов Nginx использует блоки server, которые принято называть виртуальными хостами (как в Apache). Виртуальные хосты позволяют размещать несколько сайтов с разными конфигурациями на одном сервере.
Каждый подключенный домен будет направлять пользователя в отдельный каталог, хранящий данные запрашиваемого сайта. Количество поддерживаемых виртуальных хостов ограничено исключительно ресурсами сервера.
Данное руководство поможет настроить блоки server для Nginx на виртуальном выделенном сервере CentOS 7.
Требования
Для выполнения руководства понадобится:
- Предварительно настроенный сервер CentOS 7.
- Желательно root доступ или пользователь с доступом к
sudo
.
Также нужно заранее установить веб-сервер Nginx. Чтобы установить только 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
. Замените их своими доменными адресами.
Если же у вас ещё нет доменных имён, вы сможете протестировать настройку при помощи фиктивных данных.
Структура каталогов
Для начала нужно создать структуру каталогов для хранения данных для сайтов.
Такие каталоги (каталоги верхнего уровня, в которых 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
Теперь сервер имеет необходимые права доступа и может корректно обслуживать контент в соответствующих каталогах.
Создание демо-страниц
Теперь нужно создать пару стандартных страниц сайтов, чтобы иметь возможность просмотреть контент.
Для тестирования подойдут и самые простые страницы. Создайте для каждого домена страницу index.html:
Чтобы создать страницу index.html для первого сайта, наберите:
vim /var/www/example.com/html/index.html
Добавьте в этот файл простой HTML-код:
Welcome to Example.com!
Success! The example.com server block is working!
Сохраните и закройте файл.
Скопируйте этот файл и используйте его в качестве шаблона для страницы второго сайта:
cp /var/www/example.com/html/index.html /var/www/example2.com/html/index.html
Откройте файл и подкорректируйте код:
vim /var/www/example2.com/html/index.html
Welcome to Example2.com!
Success! The example2.com server block is working!
Сохраните и закройте файл.
Создание блоков 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 vim /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 vim /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 vim /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;
}
}
Откорректировав данные, сохраните и закройте файл.
Включение блоков 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
Настройка локальных хостов (опционально)
Если вместо настоящих доменных имён вы использовали фиктивные имена, вы можете испытать новые виртуальные хосты, не подключаясь при этом к доменному имени. Для этого нужно настроить на компьютере локальные хосты.
Это не позволит другим посетителям просматривать сайт, но даст вам возможность проверить работу и настройки каждого сайта. Этот метод работает путем перехвата запросов, которые, как правило, поступают в DNS для разрешения доменных имен. Вместо этого можно указать IP-адреса, которые будут использоваться локальным компьютером при поступлении запросов к доменным именам.
Примечание: Прежде чем приступить к выполнению данного раздела, убедитесь, что вы находитесь на локальном компьютере, а не на сервере. Для выполнения данного раздела нужно иметь root-права, чтобы редактировать системные файлы.
В системах Mac или Linux войдите как пользователь root
и откройте файл hosts
:
sudo vim /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
.
Тестирование настройки
Теперь нужно проверить работу блоков server
. Для этого посетите домены в браузере:
http://example.com
На экране должно появиться это сообщение:
Success! The example.com server block is working!
Аналогичным образом нужно проверить и второй домен.
Success! The example2.com server block is working!
Если все настроенные сайты отвечают на запросы, значит, настройка виртуальных хостов Nginx прошла успешно.
Если файл hosts
на локальном компьютере был отредактирован, на этом этапе нужно удалить добавленные в него строки, чтобы не засорять файл ненужными настройками.
Количество блоков server
, которое можно разместить на одном сервере, ограничивается только ресурсами самого сервера. Чтобы добавить новый блок server
, просто повторите весь вышеописанный процесс.
На этом все! Profit!
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.