Освоить процесс развёртывания веб-сервера Nginx, настройки межсетевого экрана и обеспечения безопасного HTTPS-соединения.
| Компонент | Требование |
|---|---|
| ОС | Ubuntu 24.04 LTS |
| Сеть | VirtualBox Host-Only адаптер |
| Права | sudo |
| Хост | Windows с PowerShell |
Nginx :это высокопроизводительный веб-сервер, использующий асинхронную событийно-ориентированную архитектуру. В отличие от Apache, который создаёт отдельный поток на каждое соединение, Nginx использует один рабочий процесс для обслуживания тысяч одновременных соединений. Это делает его более эффективным по использованию памяти и производительности.
Где применяется: Netflix, Airbnb, Яндекс, ВКонтакте, большинство современных VPS/VDS серверов.
| Концепция | Описание |
|---|---|
| systemd | Менеджер служб Linux. Управляет запуском, остановкой и автозапуском сервисов |
| UFW | Межсетевой экран. Реализует принцип минимальных привилегий открывает только необходимые порты |
| Виртуальный хост | Блок server в конфигурации Nginx. Позволяет обслуживать несколько сайтов на одном сервере |
| TLS/HTTPS | Шифрование трафика. Самоподписанный сертификат используется в лабораторной среде |
| Graceful reload | Применение новой конфигурации без остановки обслуживания пользователей |
Цель: Освободить порты 80 и 443, удалить конфликтующее ПО.
bash
sudo systemctl stop apache2
sudo systemctl disable apache2
bash
sudo apt purge --auto-remove apache2* -y
bash
sudo ss -tulpn | grep :80
Ожидаемый результат: Пустой вывод. Порт 80 свободен.
Цель: Установить и запустить веб-сервер.
bash
sudo apt update
sudo apt install nginx -y
bash
sudo systemctl enable nginx
sudo systemctl start nginx
bash
sudo systemctl status nginx
Ожидаемый результат: Active: active (running), enabled
bash
curl http://localhost
Windows Browser http://192.168.56.10?
Цель: Разрешить только необходимые порты (22, 80, 443), запретить всё остальное.
Важно: SSH должен быть разрешён ДО включения UFW, иначе вы потеряете доступ к серверу.
---bash
sudo ufw allow ssh
sudo ufw allow http
---bash
При запросе введите y.
---bash
sudo ufw status verbose
В PowerShell на Windows:
in new powershell terminal
curl http://<IP-адрес-вашей-ВМ>
Цель: Понять структуру конфигурационных файлов.
---bash
Ключевые директивы:
| Директива | Значение |
|---|---|
user www-data; |
Рабочие процессы работают от непривилегированного пользователя |
worker_processes auto; |
Один процесс на ядро CPU |
include /etc/nginx/sites-enabled/*; |
Подключение активных виртуальных хостов |
---bash
ls -la /etc/nginx/sites-available/
Пояснение:
sites-availableхранит все конфигурации (активные и неактивные)sites-enabledсодержит символические ссылки на активные конфигурации
bash
sudo nginx -t
Ожидаемый результат: syntax is ok, test is successful
Важно: Всегда выполняйте эту команду перед перезагрузкой Nginx.
Цель: Создать самоподписанный сертификат для HTTPS.
bash
sudo mkdir -p /etc/nginx/ssl
bash
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/selfsigned.key \
-out /etc/nginx/ssl/selfsigned.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Lab/CN=localhost"
Параметры:
| Параметр | Значение |
|---|---|
-x509 |
Создаёт самоподписанный сертификат |
-nodes |
Ключ без парольной защиты |
-days 365 |
Срок действия 1 год |
-newkey rsa:2048 |
2048-битный ключ RSA |
bash
ls -la /etc/nginx/ssl/
Ожидаемый результат: Файлы selfsigned.crt и selfsigned.key присутствуют.
Цель: Настроить Nginx для приёма HTTPS-соединений и перенаправления HTTP на HTTPS.
bash
sudo nano /etc/nginx/sites-available/default
Замените содержимое на следующее:
server { listen 443 ssl; server_name _;
ssl_certificate /etc/nginx/ssl/selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/selfsigned.key;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
server { listen 80; server_name _;
return 301 https://$host$request_uri;
Что делает конфигурация:
| Блок | Функция |
|---|---|
Первый server |
Принимает HTTPS на порту 443, использует TLS-сертификат |
Второй server |
Принимает HTTP на порту 80, перенаправляет на HTTPS (код 301) |
В nano: Ctrl+O, Enter, Ctrl+X
bash
sudo nginx -t
bash
echo '<h1>I have successfully installed and configured nginx webserver</h1> </br> <h2> Your Name here</h2>' | sudo tee /var/www/html/index.html
Пояснение: reload применяет конфигурацию без остановки сервера (graceful reload).
from windows browser
https://192.168.56.10?
Ожидаемый результат: HTML-содержимое страницы приветствия Nginx.
bash
sudo systemctl status nginx --no-pager
Ожидаемый результат: active (running)
bash
sudo ss -tulpn | grep nginx
Ожидаемый результат: Строки с :80 и :443
В PowerShell:
powershell
http://<IP-адрес-вашей-ВМ>
Ожидаемый результат: HTTP/1.1 301 Moved Permanently и заголовок Location: https://...
powershell
curl -k https://<IP-адрес-вашей-ВМ>
Ожидаемый результат: HTML-содержимое
bash
sudo tail -5 /var/log/nginx/access.log
Ожидаемый результат: Записи с IP-адресом Windows и кодами 301 или 200
bash
# 1: Удаление Apache2
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo apt purge --auto-remove apache2* -y
sudo ss -tulpn | grep :80
# 2: Установка Nginx
sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
# 3: Настройка UFW
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo ufw status verbose
# 4: Проверка конфигурации
sudo nginx -t
# 5: Генерация TLS-сертификата
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/selfsigned.key \
-out /etc/nginx/ssl/selfsigned.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Lab/CN=localhost"
# 6: Настройка виртуального хоста
sudo nano /etc/nginx/sites-available/default
# (Вставьте конфигурацию из шага 6.1)
sudo nginx -t
sudo systemctl reload nginx
https://192.168.56.10?
# 7: Итоговая проверка
sudo ss -tulpn | grep nginx
sudo tail -5 /var/log/nginx/access.log
| Пункт | Команда проверки | Ожидаемый результат |
|---|---|---|
| Apache2 удалён | `sudo ss -tulpn | grep :80` |
| Nginx работает | sudo systemctl status nginx |
active (running) |
| UFW настроен | sudo ufw status verbose |
Порты 22,80,443 ALLOW IN |
| Синтаксис верен | sudo nginx -t |
syntax is ok |
| Сертификат создан | ls /etc/nginx/ssl/ |
Файлы .crt и .key |
| HTTPS доступен | curl -k https://localhost |
HTML-содержимое |
| HTTP → HTTPS | Из PowerShell curl -I http://<IP> |
Код 301 |
| Проблема | Диагностика | Решение |
|---|---|---|
| Port 80 busy | `sudo ss -tulpn | grep :80` |
| UFW блокирует | sudo ufw status verbose |
Выполнить sudo ufw allow http/https |
| Nginx не стартует | sudo nginx -t |
Исправить синтаксические ошибки |
| Сертификат не найден | ls /etc/nginx/ssl/ |
Повторить 5 |
В ходе лабораторной работы вы выполнили:
| Выполненное действие | |
|---|---|
| 1 | Удалили Apache2 и освободили порты |
| 2 | Установили и запустили Nginx |
| 3 | Настроили межсетевой экран по принципу минимальных привилегий |
| 4 | Изучили иерархическую структуру конфигурации Nginx |
| 5 | Сгенерировали самоподписанный TLS-сертификат |
| 6 | Настроили виртуальный хост с HTTPS и перенаправлением |
| 7 | Выполнили полную проверку работоспособности |
Лабораторная работа завершена. Вы успешно развернули защищённый веб-сервер Nginx.