Как обслуживать поддомены NGINX или несколько доменов

У вас есть сервер с одним публичным IP-адресом, но вам нужно разместить несколько доменов или поддоменов? Что вы будете делать? Этот сценарий может быть запутанным для начинающих. Но не беспокойтесь, в этом руководстве вы найдете все ответы, чтобы предоставить поддомен NGINX и несколько доменов.

В этом руководстве вы узнаете, как эффективно разместить поддомены NGINX или несколько доменов на одном сервере с одним IP-адресом!

Если вы готовы, приступаем к делу!

Предварительные требования

Для выполнения этого руководства вам понадобится Ubuntu Server LTS с включенным SSH и установленным NGINX. Демонстрации в этом руководстве проводятся на Ubuntu Server LTS 20.04.1.

Настройка DNS-записей

Прежде чем вы сможете предоставить поддомены NGINX или несколько доменов, вам необходимо добавить запись A в панели управления DNS. Запись A связывает и указывает все домены и поддомены на один IP-адрес, чтобы веб-браузеры могли найти ваш сайт.

1. Запустите свой любимый веб-браузер и войдите в панель управления DNS.

2. Нажмите на Добавить запись, чтобы начать добавление записей A. Ваш браузер перенаправит вас на страницу, где вы настроите DNS-настройки для вашего домена и поддоменов.

Adding an A Record

Теперь настройте DNS-настройки следующим образом:

Выберите запись A в поле Тип.

Введите @ в поле Хост, а IP-адрес вашего сервера в поле Значение.

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

Повторите этот процесс для других поддоменов.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

Финальная страница Настройки DNS выглядит примерно так, как ниже.

Viewing DNS Settings Page

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

Настройка веб-каталогов для домена NGINX и поддомена

Теперь, когда вы добавили записи A для вашего домена и поддоменов, пришло время настроить их веб-каталоги. NGINX поставляется с файлом виртуального хоста по умолчанию и настроен на обслуживание веб-каталога, расположенного по пути /usr/share/nginx/html.

Вы создадите отдельный веб-каталог для каждого домена в корневом каталоге документов NGINX (/var/www/html).

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

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. Затем запустите команду chown, чтобы рекурсивно (-R) изменить владельца каждого каталога, созданного на первом шаге, на пользователя и группу www-data. Вы меняете владельца каждого каталога на пользователя и группу www-data, поскольку NGINX работает от имени пользователя www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Создайте файл с именем index.html в выбранном вами редакторе кода, а затем скопируйте/вставьте код ниже в файл index.html. Сохраните файл в основном веб-каталоге ваших доменов (/var/www/html/awstutorial.net).

Ниже приведен HTML-код, который отображает сообщение “Поздравляем! Веб-сайт awstutorial.net работает!”, когда файл index.html открывается в веб-браузере.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Наконец, создайте такой же файл index.html в каталогах /var/www/html/web1.awstutorial.net и /var/www/html/web2.awstutorial.net. Но замените awstutorial.net на web1.awstutorial.net и web2.awstutorial.net соответственно в коде каждого файла index.html.

Настройка виртуального хоста для домена и поддоменов NGINX

У вас уже есть страница index.html для вашего домена и поддоменов, которую необходимо предоставить через веб-сервер NGINX. Следующим шагом будет создание файла конфигурации виртуального хоста NGINX для каждого домена для предоставления HTML-страниц.

1. Создайте файл конфигурации виртуального хоста NGINX с именем awstutorial.net в вашем предпочтительном редакторе кода и затем скопируйте/вставьте нижеприведенный код в этот файл. Сохраните файл в директории /etc/nginx/sites-available/.

Нижеприведенный код контролирует поведение вашего сервера, такие как имя сервера и индексная (домашняя) страница, когда пользователь пытается получить доступ к вашему домену.

server {
        # Привязывает TCP-порт 80.
        listen 80; 

				# Корневая директория используется для поиска файла
        root /var/www/html/awstutorial.net;
				# Определяет файл для использования в качестве индексной страницы
        index index.html index.htm;
				# Определяет доменное или поддоменное имя. 
        # Если server_name не определено в блоке сервера, то 
				# Nginx использует 'empty' имя
        server_name awstutorial.net;

        location / {
            # Возвращает ошибку 404 для случаев, когда сервер получает 
						# запросы на недоступные файлы и каталоги.
            try_files $uri $uri/ =404;
        }
    }

2. Затем выполните следующую команду nginx для проверки (-t) файла конфигурации NGINX на наличие синтаксической ошибки.

sudo nginx -t

Если в файле конфигурации NGINX не найдены синтаксические ошибки, вы получите следующий вывод.

Verifying NGINX configuration file

3. Затем выполните следующую команду для создания символической ссылки (ln -s) из /etc/nginx/sites-available в каталог /etc/nginx/sites-enabled/. Эта команда активирует файл конфигурации виртуального хоста awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

Форматы sites-available и sites-enabled являются стандартными для установки NGINX в Ubuntu, но другие дистрибутивы могут использовать другой стандарт.

4. Повторите шаги с одного по три для создания файлов конфигурации виртуального хоста NGINX с именами web1.awstutorial.net и web2.awstutorial.net.

Измените следующие строки в каждом файле конфигурации виртуального хоста NGINX:

  • Замените строку root /var/www/html/awstutorial.net на каталог веб-корневого каталога каждого поддомена (root /var/www/html/web1.awstutorial.net и root /var/www/html/web2.awstutorial.net).
  • Замените строку server_name awstutorial.net на имя каждого поддомена (server_name web1.awstutorial.net и server_name web2.awstutorial.net).

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

# Включает файл конфигурации виртуального хоста NGINX для web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Включает файл конфигурации виртуального хоста NGINX для web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Запустите следующую команду systemctl, чтобы перезапустить службу NGINX (restart nginx), чтобы применить все изменения конфигурации.

sudo systemctl restart nginx

7. Наконец, перейдите на URL-адреса домена и поддоменов в вашем браузере, чтобы проверить, работают ли веб-сайты нормально.

Если домен и поддомены загружаются, вы увидите сообщение, подобное приведенному ниже.

Verifying websites are loading through the web browser.

Настройка HTTPS на домене NGINX и поддомене

Вы успешно настроили и протестировали домен и поддомены NGINX на протоколе HTTP, что замечательно. Но вы должны обеспечить безопасное соединение вашего домена и поддоменов, включив HTTPS. Как? С помощью сертификата, который вы получите от удостоверяющего центра, такого как Let’s Encrypt SSL.

1. Сначала выполните команду ниже, чтобы установить программный пакет Certbot (apt-get install certbot). Certbot позволяет загрузить SSL-сертификат для вашего домена и поддоменов.

sudo apt-get install certbot python3-certbot-nginx -y

2. Затем выполните команду certbot ниже, чтобы загрузить SSL-сертификат (certonly) для вашего домена (-d awstutorial.net). Обратите внимание, что вы соглашаетесь с условиями обслуживания (—agree-tos) с указанием вашего адреса электронной почты (—email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Замените электронную почту своей собственной.

3. Введите ‘1’, чтобы выбрать плагин NGINX Web Server (nginx) для аутентификации с ACME CA, как показано ниже.

Selecting Plugin to Authenticate with ACME CA

После выбора плагина NGINX Web Server вы увидите процесс загрузки SSL-сертификата для вашего домена (awstutorial.net).

По умолчанию SSL-сертификаты Let’s Encrypt хранятся в каталоге /etc/letsencrypt/live/.

Showing Download Progress of the SSL Certificate

4. Теперь выполните каждую команду ниже, как вы делали на втором шаге, чтобы загрузить SSL-сертификаты для оставшихся поддоменов (web1.awstutorial.net и web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Наконец, выполните команду ls ниже, чтобы перечислить все SSL-сертификаты в каталоге /etc/letsencrypt/live/, содержащие (*) awstutorial.net в их названиях. Это позволяет вам проверить наличие SSL-сертификатов.

ls /etc/letsencrypt/live/*awstutorial.net/

Ниже вы увидите SSL-сертификаты для вашего домена и поддоменов.

Showing SSL certificate for all domains.

Настройка виртуального хоста NGINX для использования SSL-сертификатов

В данном моменте у вас уже есть SSL-сертификаты в вашем распоряжении. Но как их использовать для обеспечения безопасности вашего домена и поддоменов? Вы определите путь к сертификатам в блоке server каждого конфигурационного файла виртуального хоста NGINX.

1. Откройте файл конфигурации виртуального хоста NGINX для awstutorial.net, находящийся в каталоге /etc/nginx/sites-available/, в вашем предпочтительном текстовом редакторе.

2. Замените содержимое файла следующим кодом, где вы определяете путь к SSL-сертификату вашего домена и протоколу SSL (под Path of the SSL certificate).

server {
	     # Привязывает TCP-порт 80.
       listen 80;
	     # Определяет доменное имя или поддомен. 
       # Если в блоке сервера не определено server_name, то 
	     # Nginx использует 'пустое' имя
       server_name awstutorial.net;
	     # Перенаправляет трафик в соответствующий 
	     # блок сервера HTTPS с кодом состояния 301
       return 301 https://$host$request_uri;
       }

server {
        # Привязывает TCP-порт 443 и включает SSL.
        listen 443 SSL;
	      # Корневой каталог, используемый для поиска файла        
	      root /var/www/html/awstutorial.net; 
	      # Определяет доменное имя или поддомен. 
        # Если в блоке сервера не определено server_name, то 
	      # Nginx использует 'пустое' имя
        server_name awstutorial.net;

	      # Путь к SSL-сертификату
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Используйте файл, созданный командой certbot.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Определите путь к файлу dhparam.pem.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Возвращает ошибку 404 в случаях, когда сервер получает 
	      # запросы на недоступные файлы и каталоги.
        try_files $uri $uri/ =404;
        }

    }

3. Повторите тот же процесс (шаги один-два) для оставшихся файлов конфигурации виртуального хоста (web1.awstutorial.net и web2.awstutorial.net). Но не забудьте заменить путь к SSL-сертификату на путь к сертификату вашего поддомена (в разделе Путь к SSL-сертификату).

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

sudo systemctl restart nginx

5. Наконец, перейдите по URL-адресу вашего домена и поддомена в веб-браузере. Но на этот раз вместо протокола HTTP используйте HTTPS, чтобы убедиться, что они работают.

Ниже вы можете увидеть значок замка на панели адреса, который указывает на то, что веб-сайт защищен вашим SSL-сертификатом.

Verifying Domain is Secure

Заключение

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

Теперь почему бы не использовать эту настройку в производственной среде, например, для хостинга нескольких приложений на одном сервере и предоставления доступного веб-хостинга?

Source:
https://adamtheautomator.com/nginx-subdomain/