Пошаговая настройка веб-сервера на Ubuntu 2026: от установки до запуска первого сайта | AdminWiki

Пошаговая настройка веб-сервера на Ubuntu 2026: от установки до запуска первого сайта

28 июля 2026 10 мин. чтения

Это руководство проведет вас через полный цикл развертывания веб-сервера на Ubuntu 2026. Вы выполните установку Nginx или Apache, подключите PHP-FPM и MariaDB, настроите виртуальный хост и опубликуете первый сайт. Все команды проверены на актуальных версиях пакетов, а типовые ошибки разобраны с конкретными решениями.

Через 30-40 минут вы получите готовый к работе сервер с поддержкой динамических страниц и баз данных. Инструкция подходит для тестовой среды и для production при условии выполнения шагов по безопасности из седьмого раздела.

Что вы получите после этого руководства

После выполнения всех шагов у вас будет полностью настроенный веб-сервер с привязанным доменом, работающим PHP и базой данных. Вы сможете размещать сайты, обрабатывать динамические запросы и подключаться к MySQL/MariaDB из PHP-скриптов.

Конфигурация протестирована на Ubuntu 2026. Каждая команда сопровождается пояснением, которое помогает понять логику действия и избежать ошибок при адаптации под свои задачи. Страх «сработает ли это в моем случае?» закрывается структурой: вы не просто копируете команды, а видите, зачем нужен каждый шаг.

Шаг 1: Выбор веб-сервера - Nginx или Apache

Выбор между Nginx и Apache определяет архитектуру всего стека. Оба сервера решают задачу отдачи HTTP-контента, но делают это по-разному. Правильное решение на старте экономит часы отладки в будущем.

Nginx: плюсы, минусы и когда выбирать

Nginx обрабатывает соединения асинхронно, в событийно-ориентированной модели. Один рабочий процесс обслуживает тысячи одновременных соединений без линейного роста потребления памяти. На отдаче статических файлов Nginx показывает производительность в 2-3 раза выше Apache при одинаковом железе.

Сильные стороны Nginx:

  • Эффективная работа как reverse-прокси и балансировщика нагрузки.
  • Встроенная поддержка HTTP/2, gzip-сжатия и кэширования.
  • Простой синтаксис конфигурации: server-блоки вместо громоздких Directory-секций.

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

Выбирайте Nginx для высоконагруженных проектов, микросервисной архитектуры, работы как прокси перед бэкендами на Node.js или Python. Это стандарт де-факто для новых проектов в 2026 году.

Apache: плюсы, минусы и когда выбирать

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

Сильные стороны Apache:

  • Гибкая настройка через .htaccess: можно менять поведение сервера на уровне отдельных директорий без перезагрузки.
  • Богатая экосистема модулей: mod_rewrite, mod_security, mod_php и десятки других.
  • Совместимость с legacy-проектами, заточенными под особенности Apache.

Apache оправдан для shared-хостинга, где нужна изоляция настроек между пользователями через .htaccess, и для проектов с глубокой интеграцией в экосистему модулей Apache. Если вы переносите старый сайт, который использует правила mod_rewrite в .htaccess, Apache сэкономит время на миграцию.

Рекомендация для новичков: начинайте с Nginx. Его конфигурация логичнее, документация обширнее, а производительность из коробки выше. Дальнейшие шаги руководства показывают настройку для обоих серверов.

Шаг 2: Подготовка сервера и установка веб-сервера

Перед установкой обновите список пакетов и установленные компоненты системы. Это гарантирует актуальные версии и устраняет известные уязвимости.

sudo apt update && sudo apt upgrade -y

После обновления система готова к установке выбранного веб-сервера. Базовая структура конфигураций для обоих серверов похожа: есть директории для доступных сайтов (sites-available) и для активных (sites-enabled). Активация сайта выполняется символической ссылкой из первой директории во вторую.

Установка Nginx на Ubuntu 2026

Nginx доступен в стандартных репозиториях Ubuntu. Версия из репозитория стабильна и получает обновления безопасности.

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Проверьте статус сервиса:

sudo systemctl status nginx

Вывод должен содержать «active (running)». Проверьте доступность сервера локально:

curl -I localhost

Ответ с HTTP/1.1 200 OK подтверждает работу. Конфигурационные файлы находятся в /etc/nginx/sites-available/. После создания конфига для сайта вы активируете его символической ссылкой в /etc/nginx/sites-enabled/.

Установка Apache на Ubuntu 2026

Apache устанавливается аналогично из стандартных репозиториев.

sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2

Проверка статуса:

sudo systemctl status apache2

Локальная проверка через curl даст аналогичный ответ 200 OK. Конфигурация сайтов Apache хранится в /etc/apache2/sites-available/. Для активации используется утилита a2ensite, которая автоматически создает символическую ссылку в /etc/apache2/sites-enabled/.

Если сервер развернут на VDS, вы можете протестировать доступ из браузера по IP-адресу. На экране появится стандартная заглушка Nginx или Apache. Это подтверждает, что сервер принимает внешние соединения. Для продуктивной работы с базами данных и бэкапами обратите внимание на облачные серверы Timeweb Cloud, которые предоставляют готовую инфраструктуру с автоматическим резервированием.

Шаг 3: Настройка виртуального хоста (сайта)

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

Создайте корневую директорию для сайта и назначьте владельца:

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com

Замените example.com на ваш домен. Внутри html будут размещаться файлы сайта.

Создание виртуального хоста в Nginx

Создайте конфигурационный файл:

sudo nano /etc/nginx/sites-available/example.com

Содержимое для статического сайта:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Директива server_name указывает домены, на которые отвечает этот хост. root задает корневую директорию. try_files проверяет наличие файла и возвращает 404, если ничего не найдено.

Активируйте хост символической ссылкой и проверьте конфигурацию:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Команда nginx -t проверяет синтаксис. При ошибке вы увидите конкретную строку и файл, где допущена проблема. Детальный разбор создания виртуальных хостов с примерами для PHP и проксирования читайте в руководстве по развертыванию стека LEMP.

Создание виртуального хоста в Apache

Создайте конфигурационный файл:

sudo nano /etc/apache2/sites-available/example.com.conf

Содержимое:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html

    <Directory /var/www/example.com/html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Активация хоста и перезагрузка:

sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Для профессиональной настройки Apache с упором на безопасность и оптимизацию изучите полное руководство по конфигурации Apache2.

Шаг 4: Установка и настройка PHP

PHP обрабатывает динамический контент на стороне сервера. Установите PHP и модули, необходимые для работы с веб-сервером и базой данных:

sudo apt install php-fpm php-mysql -y

Проверьте версию:

php -v

На Ubuntu 2026 по умолчанию устанавливается PHP 8.x. Точная версия зависит от репозиториев на момент установки. Конфигурация PHP-FPM находится в /etc/php/8.x/fpm/php.ini (замените 8.x на вашу версию).

Базовые настройки безопасности в php.ini:

cgi.fix_pathinfo=0
expose_php = Off

Параметр cgi.fix_pathinfo=0 предотвращает попытки выполнения произвольных файлов через манипуляции с PATH_INFO. expose_php = Off скрывает версию PHP в заголовках ответа.

Интеграция PHP-FPM с Nginx

Nginx не умеет выполнять PHP-код самостоятельно. Он передает запросы к PHP-скриптам процессору PHP-FPM через FastCGI. Добавьте в секцию server вашего виртуального хоста:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.x-fpm.sock;
}

Замените 8.x на вашу версию PHP. Путь к сокету можно уточнить командой:

ls /run/php/

После изменения конфигурации проверьте синтаксис и перезагрузите Nginx:

sudo nginx -t && sudo systemctl reload nginx

Интеграция PHP с Apache

Apache поддерживает два режима работы с PHP: модуль mod_php и PHP-FPM. Для новых установок рекомендуется PHP-FPM как более производительный и изолированный вариант.

Установка модуля mod_php (проще, но менее гибко):

sudo apt install libapache2-mod-php -y
sudo systemctl restart apache2

Для настройки PHP-FPM с Apache включите модули проксирования:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.x-fpm
sudo systemctl restart apache2

Проверьте работу PHP. Создайте тестовый файл:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.com/html/info.php

Откройте в браузере http://your-server-ip/info.php. Фиолетовая таблица с информацией о PHP подтверждает корректную интеграцию. После проверки удалите этот файл - он раскрывает детали конфигурации сервера.

sudo rm /var/www/example.com/html/info.php

Шаг 5: Установка и настройка MySQL/MariaDB

MariaDB - это форк MySQL, полностью совместимый по API и SQL-синтаксису. В Ubuntu 2026 MariaDB устанавливается по умолчанию при запросе mysql-server. Установите сервер баз данных:

sudo apt install mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

Базовая безопасность MariaDB

Сразу после установки запустите скрипт начальной настройки безопасности:

sudo mysql_secure_installation

Скрипт задаст несколько вопросов. Рекомендуемые ответы:

  • Switch to unix_socket authentication? → n (оставляем парольную аутентификацию для совместимости).
  • Change the root password? → Y, задайте надежный пароль.
  • Remove anonymous users? → Y.
  • Disallow root login remotely? → Y.
  • Remove test database and access to it? → Y.
  • Reload privilege tables now? → Y.

Эти действия закрывают типовые векторы атак: анонимный доступ, удаленный root-логин и тестовую базу с открытыми привилегиями.

Создание первой базы данных и пользователя

Подключитесь к MariaDB под root:

sudo mariadb -u root -p

Введите пароль root, заданный при запуске mysql_secure_installation. Создайте базу данных и пользователя для сайта:

CREATE DATABASE mywebsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'siteuser'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON mywebsite.* TO 'siteuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Проверьте подключение из PHP. Создайте файл db_test.php в корне сайта:

<?php
$conn = new mysqli('localhost', 'siteuser', 'strong_password_here', 'mywebsite');
if ($conn->connect_error) {
    die('Connection failed: ' . $conn->connect_error);
}
echo 'Connected successfully to MariaDB';
?>

Откройте файл в браузере. Сообщение «Connected successfully» подтверждает, что стек LAMP/LEMP полностью работоспособен. Удалите тестовый файл после проверки.

Шаг 6: Публикация первого сайта

Все компоненты настроены. Разместите файлы сайта в корневой директории /var/www/example.com/html. Проверьте права: директории - 755, файлы - 644. Владелец - пользователь, от которого работает веб-сервер (www-data для Nginx/Apache или ваш пользователь, если вы следовали шагу 3).

Создайте рабочий index.php, который выводит информацию о сервере и проверяет соединение с базой данных:

<?php
// Показываем ошибки (отключите в production)
error_reporting(E_ALL);
ini_set('display_errors', 0);

// Версия PHP
echo '<h1>Сервер работает</h1>';
echo '<p>PHP версия: ' . phpversion() . '</p>';

// Проверка подключения к MariaDB
$conn = new mysqli('localhost', 'siteuser', 'strong_password_here', 'mywebsite');
if ($conn->connect_error) {
    echo '<p style="color:red;">Ошибка подключения к БД: ' . $conn->connect_error . '</p>';
} else {
    echo '<p style="color:green;">Подключение к MariaDB успешно</p>';
    $conn->close();
}
?>

Для доступа по домену настройте A-запись у вашего DNS-провайдера, указав IP-адрес сервера. После обновления DNS (от нескольких минут до 24 часов) сайт откроется по доменному имени. Проверьте доступность из браузера по IP и по домену.

Если сайт не открывается, начните диагностику с логов. Ошибки веб-сервера Nginx находятся в /var/log/nginx/error.log, Apache - в /var/log/apache2/error.log. Подробный разбор ошибок 403, 404, 500 и 502 с готовыми командами для исправления смотрите в руководстве по диагностике ошибок веб-сервера.

Шаг 7: Базовая безопасность и типовые ошибки

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

Настройка брандмауэра UFW

UFW - это интерфейс к iptables, упрощающий управление правилами. Разрешите SSH, HTTP и HTTPS:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'  # для Nginx
# или
sudo ufw allow 'Apache Full'  # для Apache
sudo ufw enable

Проверьте статус:

sudo ufw status verbose

Правила применяются немедленно. Порт 22 (SSH) открыт, порты 80 и 443 открыты для веб-трафика.

Установка SSL-сертификата Let's Encrypt

Certbot автоматизирует получение и обновление бесплатных SSL-сертификатов. Установите Certbot и плагин для вашего веб-сервера:

sudo apt install certbot python3-certbot-nginx -y  # для Nginx
# или
sudo apt install certbot python3-certbot-apache -y  # для Apache

Запустите получение сертификата:

sudo certbot --nginx -d example.com -d www.example.com
# или
sudo certbot --apache -d example.com -d www.example.com

Certbot автоматически изменит конфигурацию виртуального хоста, добавив перенаправление HTTP на HTTPS и пути к файлам сертификата. Проверьте автоматическое обновление:

sudo certbot renew --dry-run

Если тест проходит без ошибок, Certbot будет обновлять сертификаты автоматически. Для углубленной настройки HTTPS с HSTS, CSP и защитой от атак обратитесь к руководству по полной защите веб-серверов.

Типовые ошибки и их решение

ОшибкаПричинаРешение
403 ForbiddenНедостаточно прав на директорию или отсутствует индексный файлПроверьте права: sudo chmod -R 755 /var/www/example.com. Убедитесь, что index.php или index.html существует.
502 Bad Gateway (Nginx)PHP-FPM не запущен или сокет недоступенПроверьте статус PHP-FPM: sudo systemctl status php8.x-fpm. Проверьте путь к сокету в конфиге Nginx.
503 Service Unavailable (Apache)Модуль PHP не загружен или сервис PHP-FPM остановленПроверьте модули Apache: apache2ctl -M | grep php. Перезапустите PHP-FPM.
Сайт не открывается по доменуDNS-запись не обновлена или неверный server_nameПроверьте A-запись: dig example.com. Сравните IP в ответе с IP сервера. Проверьте server_name в конфиге.
Ошибка подключения к БД из PHPНеверный пароль, пользователь не создан, сокет MariaDB недоступенПроверьте статус MariaDB: sudo systemctl status mariadb. Проверьте учетные данные через консоль: sudo mariadb -u siteuser -p.

Логи - основной инструмент диагностики. Nginx пишет ошибки в /var/log/nginx/error.log, Apache - в /var/log/apache2/error.log, PHP-FPM - в /var/log/php8.x-fpm.log. При любой нештатной ситуации начинайте с чтения логов командой tail -f и повторения запроса, вызывающего ошибку.

Что дальше: автоматизация и масштабирование

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

  • Контейнеризация через Docker. Упаковка приложения со всеми зависимостями в изолированный контейнер гарантирует идентичность dev и production окружений. Один Dockerfile заменяет страницу инструкций по установке.
  • Автоматизация развертывания через Ansible. Описание инфраструктуры как кода позволяет развернуть идентичный сервер за минуты, а не часы. Плейбук Ansible содержит все шаги из этого руководства в машиночитаемом виде.
  • Мониторинг и резервное копирование. Netdata дает детальную картину нагрузки на сервер в реальном времени. Автоматический бэкап баз данных через mysqldump и cron защищает от потери данных.

База знаний admin-wiki содержит практические руководства по каждой из этих тем. Начните с быстрой настройки Nginx за 15 минут, чтобы углубить понимание веб-сервера, или перейдите к материалам по Docker и оркестрации для масштабирования инфраструктуры.

Поделиться:
Сохранить гайд? В закладки браузера