Поиск по сайту:

Как настроить серверные блоки 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 создать все необходимые родительские каталоги по пути:

  1. sudo mkdir -p /usr/share/nginx/example.com/html
  2. sudo mkdir -p /usr/share/nginx/test.com/html

Теперь, когда у вас есть свои каталоги, вы можете передать право собственности на веб-каталоги своей обычной учетной записи пользователя. Это позволит вам писать им без разрешений sudo.

Вы можете использовать переменную среды $USER, чтобы назначить владельца учетной записи, под которой вы сейчас вошли (убедитесь, что вы не вошли в систему как root). Вы должны назначить групповое разрешение для этих каталогов nginx, учетной записи, которая автоматически создается для Nginx в Rocky Linux, что позволит самому веб-серверу создавать новые файлы, если это необходимо вашим веб-приложениям. Команда chown позволяет сделать и то, и другое одновременно:

  1. sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
  2. sudo chown -R $USER:nginx /usr/share/nginx/test.com/html

Наконец, используйте команду chmod, чтобы убедиться, что и ваш пользователь, и группа nginx имеют полные (7) разрешения, тогда как другие пользователи имеют разрешения только на чтение (5). Чтобы узнать больше о разрешениях Linux, обратитесь к Основам разрешений Linux.

  1. sudo chmod -R 775 /usr/share/nginx

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

Шаг 2 — Создание образцов страниц для каждого сайта

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

Используя nano или ваш любимый текстовый редактор, создайте файл index.html в своем первом домене:

  1. 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.

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

  1. cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/

Теперь вы можете открыть новый файл в nano или в своем любимом текстовом редакторе:

  1. 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, чтобы создать файл конфигурации для вашего первого домена:

  1. 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;
        }
}

Это все, что вам нужно для конфигурации. Сохраните и закройте файл, чтобы выйти.

Создание файла второго блока сервера

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

  1. sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf

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

  1. 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 нет синтаксических ошибок:

  1. sudo nginx -t

Если проблем не обнаружено, перезапустите Nginx, чтобы изменения вступили в силу:

  1. sudo systemctl restart nginx

Теперь Nginx должен обслуживать оба ваших доменных имени.

Шаг 5 — Изменение файла локальных хостов для тестирования (необязательно)

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

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

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

Если вы работаете в среде Mac или Linux, ваш файл hosts находится в /etc/hosts:

  1. 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.