Как настроить серверные блоки Nginx (виртуальные хосты) в Rocky Linux 9
Введение
При использовании веб-сервера Nginx серверные блоки (аналогичные виртуальным хостам в Apache) могут использоваться для инкапсуляции деталей конфигурации и размещения более одного домена на одном сервере.
В этом руководстве вы узнаете, как настроить серверные блоки в Nginx на сервере Rocky Linux 9.
Предпосылки
В этом руководстве вы должны использовать пользователя без полномочий root с привилегиями sudo
. Если у вас нет такого настроенного пользователя, вы можете создать его, следуя нашему руководству по начальной настройке сервера Rocky Linux 9.
Вам также потребуется установить Nginx на вашем сервере. Вы можете установить его, следуя инструкциям по установке Nginx на Rocky Linux 9:
Шаг 1 — Настройка новых корневых каталогов документов
В демонстрационных целях в этом руководстве рассматривается настройка двух доменов с сервером Nginx. В этом руководстве используются доменные имена test.com. Если у вас уже есть собственные домены, вы можете использовать их.
Примечание. Для получения дополнительной информации о регистрации нового домена в DigitalOcean см. нашу документацию по продуктам «Домены и DNS».
Если у вас нет двух доменных имен для настройки, вы можете пока использовать имена-заполнители. Вы по-прежнему сможете протестировать свою конфигурацию.
По умолчанию в Nginx на Rocky Linux 9 включен один серверный блок. Он настроен на обслуживание документов из каталога /usr/share/nginx/html
. Хотя это хорошо работает для одного сайта, вам потребуются дополнительные каталоги для обслуживания нескольких сайтов. Вы можете считать каталог /usr/share/nginx/html
каталогом по умолчанию, который будет обслуживаться, если запрос клиента не соответствует ни одному из ваших других сайтов.
Вы можете создать структуру каталогов в /usr/share/nginx
для каждого из ваших сайтов. Фактический веб-контент будет помещен в каталог html
внутри этих каталогов, специфичных для сайта. Это дает вам некоторую дополнительную гибкость для создания других каталогов, связанных с вашими сайтами, по мере необходимости.
Создайте эти каталоги для каждого из ваших сайтов. Флаг -p
указывает mkdir
создать все необходимые родительские каталоги по пути:
- sudo mkdir -p /usr/share/nginx/example.com/html
- sudo mkdir -p /usr/share/nginx/test.com/html
Теперь, когда у вас есть свои каталоги, вы можете передать право собственности на веб-каталоги своей обычной учетной записи пользователя. Это позволит вам писать им без разрешений sudo
.
Вы можете использовать переменную среды $USER
, чтобы назначить владельца учетной записи, под которой вы сейчас вошли (убедитесь, что вы не вошли в систему как root). Вы должны назначить групповое разрешение для этих каталогов nginx
, учетной записи, которая автоматически создается для Nginx в Rocky Linux, что позволит самому веб-серверу создавать новые файлы, если это необходимо вашим веб-приложениям. Команда chown
позволяет сделать и то, и другое одновременно:
- sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
- sudo chown -R $USER:nginx /usr/share/nginx/test.com/html
Наконец, используйте команду chmod
, чтобы убедиться, что и ваш пользователь, и группа nginx
имеют полные (7) разрешения, тогда как другие пользователи имеют разрешения только на чтение (5). Чтобы узнать больше о разрешениях Linux, обратитесь к Основам разрешений Linux.
- sudo chmod -R 775 /usr/share/nginx
Теперь ваша структура каталогов настроена, и вы можете двигаться дальше.
Шаг 2 — Создание образцов страниц для каждого сайта
Теперь, когда у вас настроена структура каталогов, создайте страницу по умолчанию для каждого из ваших сайтов, чтобы вам было что отображать.
Используя nano
или ваш любимый текстовый редактор, создайте файл index.html
в своем первом домене:
- nano /usr/share/nginx/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>
Сохраните и закройте файл, когда закончите. Если вы используете nano
, нажмите Ctrl+X
, затем, когда будет предложено, Y
, а затем Enter.
Поскольку файл для вашего второго сайта будет таким же для демонстрационных целей, вы можете скопировать его во второй корень документа следующим образом:
- cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/
Теперь вы можете открыть новый файл в nano
или в своем любимом текстовом редакторе:
- nano /usr/share/nginx/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 — Создание файлов блоков сервера для каждого домена
Теперь, когда у вас есть контент для обслуживания, вам нужно создать серверные блоки, которые сообщат Nginx, как это сделать.
По умолчанию Nginx в Rocky Linux содержит один серверный блок «по умолчанию» внутри своего основного файла конфигурации, nginx.conf
. Этот блок внутри этого файла выглядит следующим образом:
…
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
…
Вы можете использовать это как шаблон для своих собственных конфигураций, которые вы можете создать в отдельных файлах. Начните с разработки блока сервера вашего первого домена, который затем вы можете скопировать для своего второго домена и внести необходимые изменения.
Создание первого файла блока сервера
Создайте свой первый файл конфигурации блока сервера в каталоге /etc/nginx/conf.d
. Основной файл конфигурации Nginx по умолчанию включает строку include /etc/nginx/conf.d/*.conf;
, что означает, что он будет проверять файлы, соответствующие этому шаблону, на наличие дополнительных серверных блоков.
Используйте ваш любимый текстовый редактор с правами sudo
, чтобы создать файл конфигурации для вашего первого домена:
- sudo nano /etc/nginx/conf.d/example.com.conf
Начните с вставки этого базового блока сервера:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/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
, или вы можете оставить блок сервера по умолчанию включенным в nginx.conf
, который будет обслуживать содержимое каталога /usr/share/nginx/html
, если запрошенный хост не может быть найден.
В этом руководстве вы оставите блок сервера «по умолчанию» для обслуживания несовпадающих запросов, поэтому ваша новая конфигурация example.com
не будет содержать default_server
:
server {
listen 80;
listen [::]:80;
. . .
}
Следующее, что нужно настроить, — это корень документа, указанный в директиве root
. Укажите его на созданный вами корень документа сайта:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
}
Затем вам нужно изменить server_name
, чтобы он соответствовал запросам для вашего первого домена. Вы можете дополнительно добавить любые псевдонимы, которые вам нужны. В этом руководстве вы добавите псевдоним example.com
и www.example.com
для демонстрации.
Когда вы закончите, ваш файл будет выглядеть так:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
Это все, что вам нужно для конфигурации. Сохраните и закройте файл, чтобы выйти.
Создание файла второго блока сервера
Теперь, когда у вас есть первоначальная конфигурация блока сервера, вы можете использовать ее в качестве основы для второго файла. Скопируйте его, чтобы создать новый файл:
- sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf
Откройте новый файл с правами sudo
в предпочитаемом вами редакторе:
- sudo nano /etc/nginx/conf.d/test.com.conf
Опять же, убедитесь, что вы не используете параметр default_server
для директивы listen
в этом файле, если вы уже использовали его в другом месте. Настройте директиву root
, чтобы она указывала на корень документа вашего второго домена, и настройте server_name
, чтобы он соответствовал доменному имени вашего второго сайта (не забудьте указать все псевдонимы).
Когда вы закончите, ваш файл, скорее всего, будет выглядеть так:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/test.com/html;
index index.html index.htm index.nginx-debian.html;
server_name test.com www.test.com;
location / {
try_files $uri $uri/ =404;
}
}
Сохраните и закройте файл. На следующем шаге вы перезагрузите Nginx, чтобы отразить ваши изменения.
Шаг 4 — Включение блоков сервера и перезапуск Nginx
Теперь у вас есть три включенных блока сервера, которые настроены на ответ на основе их директивы listen
и server_name
(подробнее о том, как Nginx обрабатывает эти директивы, можно прочитать здесь):
example.com
: будет отвечать на запросыexample.com
иwww.example.com
test.com
: будет отвечать на запросыtest.com
иwww.test.com
по умолчанию
: будет отвечать на любые запросы к порту 80, которые не соответствуют двум другим блокам.
Сохраните и закройте файл, когда закончите. Затем проверьте, чтобы убедиться, что ни в одном из ваших файлов Nginx нет синтаксических ошибок:
- sudo nginx -t
Если проблем не обнаружено, перезапустите Nginx, чтобы изменения вступили в силу:
- sudo systemctl restart nginx
Теперь Nginx должен обслуживать оба ваших доменных имени.
Шаг 5 — Изменение файла локальных хостов для тестирования (необязательно)
Если вы не использовали доменные имена, которыми владеете и которые на самом деле указывают на IP-адрес этого сервера, а вместо этого использовали значения-заполнители, вы можете изменить файл hosts на локальном компьютере, чтобы временно протестировать Конфигурация блока сервера Nginx.
Это не позволит другим посетителям правильно просматривать ваш сайт, но даст вам возможность получить доступ к каждому сайту независимо и протестировать вашу конфигурацию. Это работает путем перехвата запросов, которые обычно отправляются в DNS для разрешения доменных имен. Вместо этого вы можете настроить файл hosts для автоматического жесткого кодирования определенных доменов на определенные удаленные адреса.
Примечание. Убедитесь, что во время этих шагов вы работаете на локальном компьютере, а не на удаленном сервере. Для этого вам потребуется root-доступ, членство в административной группе или иная возможность редактировать системные файлы.
Если вы работаете в среде Mac или Linux, ваш файл hosts находится в /etc/hosts
:
- sudo nano /etc/hosts
Если вы работаете в Windows, ваш файл hosts находится в C:\Windows\System32\drivers\etc\hosts
.
Вам нужно знать общедоступный IP-адрес вашего сервера и домены, которые вы хотите направить на сервер. Предполагая, что общедоступный IP-адрес вашего сервера — 203.0.113.5
, строки, которые вы добавляете в свой файл, будут выглядеть так:
127.0.0.1 localhost
. . .
203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com
Это перехватит любые запросы для example.com
и test.com
и отправит их на ваш сервер, что вам понадобится, если вы на самом деле не владеете доменами. что вы тестируете.
Сохраните и закройте файл, когда закончите.
Шаг 6 — Проверка ваших результатов
Теперь, когда вы все настроили, вы должны проверить правильность работы ваших серверных блоков. Вы можете сделать это, посетив домены в своем веб-браузере:
http://example.com
Вы должны увидеть страницу, которая выглядит следующим образом:
Если вы посетите свое второе доменное имя, вы должны увидеть немного другой сайт:
http://test.com
Если оба этих сайта работают, вы успешно настроили два независимых блока серверов с Nginx.
На этом этапе, если вы настроили файл hosts
на локальном компьютере для тестирования, вы, вероятно, захотите удалить добавленные строки.
Если вам нужен доступ к вашему серверу по доменному имени для общедоступного сайта, вы, вероятно, захотите приобрести доменное имя для каждого из ваших сайтов.
Заключение
Теперь у вас должна быть возможность создавать серверные блоки для каждого домена, который вы хотите разместить на одном сервере. Нет никаких реальных ограничений на количество серверных блоков, которые вы можете создать, если ваше оборудование может обрабатывать трафик.
Далее вы можете узнать, как настроить аутентификацию по паролю с помощью Nginx.