Освоить процесс развёртывания веб-сервера Nginx, настройки межсетевого экрана и обеспечения безопасного HTTPS-соединения.
| Компонент | Требование |
|---|---|
| ОС | Ubuntu 24.04 LTS |
| Сеть | VirtualBox Host-Only адаптер |
| Права | sudo |
| Хост | Windows с PowerShell |
Nginx это высокопроизводительный веб-сервер, использующий асинхронную событийно-ориентированную архитектуру. Nginx использует один рабочий процесс для обслуживания тысяч одновременных соединений. Это делает его более эффективным по использованию памяти и производительности.
Где применяется: Netflix, Airbnb, Яндекс, ВКонтакте, большинство современных VPS/VDS серверов.
| Концепция | Описание |
|---|---|
| systemd | Менеджер служб Linux. Управляет запуском, остановкой и автозапуском сервисов |
| UFW | Межсетевой экран. Реализует принцип минимальных привилегий открывает только необходимые порты |
| Виртуальный хост | Блок server в конфигурации Nginx. Позволяет обслуживать несколько сайтов на одном сервере |
| TLS/HTTPS | Шифрование трафика. Самоподписанный сертификат используется в лабораторной среде |
| Graceful reload | Применение новой конфигурации без остановки обслуживания пользователей |
Цель: Освободить порты 80 и 443, удалить конфликтующее ПО.
sudo systemctl stop apache2
sudo systemctl disable apache2sudo apt purge --auto-remove apache2* -ysudo ss -tulpn | grep :80Ожидаемый результат: Пустой вывод. Порт 80 свободен.
В данной лабораторной работе используются два сетевых адаптера:
- enp0s3: NAT, используется для доступа в Интернет.
- enp0s8: Host-Only, используется для связи между хост-машиной и виртуальной машиной.
Для enp0s3 следует оставить DHCP, чтобы виртуальная машина автоматически получала доступ в Интернет. Для enp0s8 рекомендуется статический IP, чтобы адрес не изменялся после перезагрузки.
sudo apt update
sudo apt upgrade -yПроверить имена интерфейсов:
sudo ip -br link
sudo ip link set enp0s8 up
ip linkОткрыть конфигурацию Netplan:
ls /etc/netplan/
sudo nano /etc/netplan/00-installer-config.yamlПример конфигурации:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: false
addresses:
- 192.168.56.101/24Применить изменения:
sudo netplan applyПроверить результат:
ifconfig enp0s8
ip addr show enp0s8
ip link
ip routessh xxxuser@192.168.56.101Цель: Установить и запустить веб-сервер.
sudo apt update
sudo apt install nginx -ysudo systemctl enable nginx
sudo systemctl start nginxsudo systemctl status nginxЦель: Разрешить только необходимые порты (22, 80, 443), запретить всё остальное.
Важно: SSH должен быть разрешён ДО включения UFW, иначе вы потеряете доступ к серверу.
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow httpssudo ufw enableПри запросе введите y.
sudo ufw status verboseВ PowerShell на Windows:
curl http://192.168.56.101Ожидаемый результат:
Ожидаемый результат:
StatusCode : 200
StatusDescription : OK
Content :
Windows Browser:
http://192.168.56.101
Цель: Понять структуру конфигурационных файлов.
sudo cat /etc/nginx/nginx.confКлючевые директивы:
| Директива | Значение |
|---|---|
user www-data; |
Рабочие процессы работают от непривилегированного пользователя |
worker_processes auto; |
Один процесс на ядро CPU |
include /etc/nginx/sites-enabled/*; |
Подключение активных виртуальных хостов |
ls -la /etc/nginx/sites-available/
ls -la /etc/nginx/sites-enabled/Пояснение:
sites-availableхранит все конфигурации (активные и неактивные)sites-enabledсодержит символические ссылки на активные конфигурации
sudo nginx -tОжидаемый результат: syntax is ok, test is successful
Важно: Всегда выполняйте эту команду перед перезагрузкой Nginx.
Цель: Создать самоподписанный сертификат для HTTPS.
sudo mkdir -p /etc/nginx/sslsudo 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 |
ls -la /etc/nginx/ssl/Ожидаемый результат: Файлы selfsigned.crt и selfsigned.key присутствуют.
Цель: Настроить Nginx для приёма HTTPS-соединений и перенаправления HTTP на HTTPS.
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
sudo systemctl reload nginx
sudo nginx -tsudo nano /var/www/html/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Nginx WebServer</title>
</head>
<body>
<h1>Your name : Welcome to My Website </h1>
<p>I have Succesfully installed and configured Nginx WebServer.</p>
</body>
</html>
From Windows browser:
[https://192.168.56.101]
(http://192.168.56.101)
Ожидаемый результат: HTML-содержимое страницы приветствия Nginx.
Ожидаемый результат: Строки с :80 и :443
Ожидаемый результат: HTTP/1.1 301 Moved Permanently и заголовок Location: https://...
WebBrowser:
[https://192.168.56.101]
(http://192.168.56.101)
Ожидаемый результат: HTML-содержимое
sudo tail -5 /var/log/nginx/access.logОжидаемый результат: Записи с IP-адресом Windows и кодами 301 или 200
Обновите стандартный веб-сайт "/var/www/html/index.html".
Создайте красивую главную веб-страницу Nginx, используя HTML, CSS и JavaScript.
Вы можете использовать Bootstrap или Tailwind CSS, чтобы сделать веб-сайт красивым и адаптивным для мобильных устройств.
# 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
# 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 | 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.