Skip to content

Mohanad0101/Lab16-NGINX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 

Repository files navigation

Лабораторная работа: Развёртывание и защита веб-сервера Nginx на Ubuntu 24.04


Цель работы

Освоить процесс развёртывания веб-сервера Nginx, настройки межсетевого экрана и обеспечения безопасного HTTPS-соединения.

Необходимые компоненты

Компонент Требование
ОС Ubuntu 24.04 LTS
Сеть VirtualBox Host-Only адаптер
Права sudo
Хост Windows с PowerShell

Теоретическое введение

Что такое Nginx?

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

Где применяется: Netflix, Airbnb, Яндекс, ВКонтакте, большинство современных VPS/VDS серверов.

Основные концепции лабораторной работы

Концепция Описание
systemd Менеджер служб Linux. Управляет запуском, остановкой и автозапуском сервисов
UFW Межсетевой экран. Реализует принцип минимальных привилегий открывает только необходимые порты
Виртуальный хост Блок server в конфигурации Nginx. Позволяет обслуживать несколько сайтов на одном сервере
TLS/HTTPS Шифрование трафика. Самоподписанный сертификат используется в лабораторной среде
Graceful reload Применение новой конфигурации без остановки обслуживания пользователей

1: Удаление Apache2

Цель: Освободить порты 80 и 443, удалить конфликтующее ПО.

Шаг 1.1: Остановка службы

sudo systemctl stop apache2
sudo systemctl disable apache2

Шаг 1.2: Полное удаление

sudo apt purge --auto-remove apache2* -y

Шаг 1.3: Проверка

sudo 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 route

Подключение с Windows PowerShell

ssh xxxuser@192.168.56.101

2: Установка Nginx

Цель: Установить и запустить веб-сервер.

Шаг 2.1: Установка

sudo apt update
sudo apt install nginx -y

Шаг 2.2: Запуск и автозапуск

sudo systemctl enable nginx
sudo systemctl start nginx

Шаг 2.3: Проверка состояния

sudo systemctl status nginx

Ожидаемый результат: Active: active (running), enabled

3: Настройка межсетевого экрана UFW

Цель: Разрешить только необходимые порты (22, 80, 443), запретить всё остальное.

Важно: SSH должен быть разрешён ДО включения UFW, иначе вы потеряете доступ к серверу.

Шаг 3.1: Разрешение портов

sudo ufw allow ssh  
sudo ufw allow http
sudo ufw allow https

Шаг 3.2: Включение UFW

sudo ufw enable

При запросе введите y.

Шаг 3.3: Проверка правил

sudo ufw status verbose

Шаг 3.4: Тестирование с хост-машины

В PowerShell на Windows:

curl http://192.168.56.101

Ожидаемый результат:
Ожидаемый результат: StatusCode : 200
StatusDescription : OK Content :

Windows Browser:
http://192.168.56.101


4: Изучение конфигурации Nginx

Цель: Понять структуру конфигурационных файлов.

Шаг 4.1: Просмотр главного файла

sudo cat /etc/nginx/nginx.conf

Ключевые директивы:

Директива Значение
user www-data; Рабочие процессы работают от непривилегированного пользователя
worker_processes auto; Один процесс на ядро CPU
include /etc/nginx/sites-enabled/*; Подключение активных виртуальных хостов

Шаг 4.2: Модульная структура

ls -la /etc/nginx/sites-available/
ls -la /etc/nginx/sites-enabled/

Пояснение:

  • sites-available хранит все конфигурации (активные и неактивные)
  • sites-enabled содержит символические ссылки на активные конфигурации

Шаг 4.3: Проверка синтаксиса

sudo nginx -t

Ожидаемый результат: syntax is ok, test is successful

Важно: Всегда выполняйте эту команду перед перезагрузкой Nginx.


5: Генерация TLS-сертификата

Цель: Создать самоподписанный сертификат для HTTPS.

Шаг 5.1: Создание каталога для сертификатов

sudo mkdir -p /etc/nginx/ssl

Шаг 5.2: Генерация ключа и сертификата

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

Шаг 5.3: Проверка

ls -la /etc/nginx/ssl/

Ожидаемый результат: Файлы selfsigned.crt и selfsigned.key присутствуют.


6: Настройка виртуального хоста с HTTPS

Цель: Настроить Nginx для приёма HTTPS-соединений и перенаправления HTTP на HTTPS.

Шаг 6.1: Редактирование конфигурации

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)

Шаг 6.2: Сохранение

В nano: Ctrl+O, Enter, Ctrl+X

Шаг 6.3: Проверка и перезагрузка

sudo systemctl reload nginx
sudo nginx -t
sudo 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>

Шаг 6.4: Проверка HTTPS на локальной машине

From Windows browser:
[https://192.168.56.101] (http://192.168.56.101)

Ожидаемый результат: HTML-содержимое страницы приветствия Nginx.


Ожидаемый результат: Строки с :80 и :443

Проверка Тестирование с Windows (HTTP → HTTPS)

Ожидаемый результат: HTTP/1.1 301 Moved Permanently и заголовок Location: https://...

Проверка : Тестирование с Windows (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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors