Apache HTTP Server (httpd) — это один из самых популярных веб-серверов в мире. Он используется для хостинга сайтов, приложений и как reverse-прокси. В Debian Apache устанавливается из пакета apache2 (не httpd, как в Red Hat). Главные сложности для новичка: правильно настроить UFW (сначала разрешить SSH, иначе потеряете доступ), создать виртуальный хост (аналог server block в Nginx), а также разобраться с разными названиями профилей UFW для разных версий Debian (Apache Full на Debian 13, WWW Full на Debian 12/11). Для HTTPS используется Certbot.
💡 В этом руководстве вы установите Apache на Debian, настроите UFW, создадите виртуальный хост, получите SSL-сертификат Let’s Encrypt, научитесь управлять сервисом и решать типичные проблемы.
В этой статье вы узнаете:
- Как установить Apache на Debian
- Как настроить UFW для HTTP и HTTPS (с учётом версии Debian)
- Как создать виртуальный хост
- Как получить SSL-сертификат Let’s Encrypt
- Как управлять сервисом и мониторить состояние
- Как решить типичные проблемы: порт занят, 403 Forbidden, ошибки конфигурации
Для кого: администраторы веб-серверов, разработчики, а также все, кто хочет поднять веб-сайт на Apache на Debian 11, 12 или 13.
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена Debian 11, 12 или 13
- Подключение к интернету стабильно
- У вас есть права sudo
- Порт 80 (HTTP) и 443 (HTTPS) свободны (если вы планируете использовать веб-сервер)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.
Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
1.1 Обновление системы
Перед установкой всегда обновляйте список пакетов:
sudo apt update && sudo apt upgrade -y
Что делает:
sudo— права суперпользователяapt update— обновляет список доступных пакетов из репозиториев&&— выполняет следующую команду только если предыдущая успешнаapt upgrade -y— обновляет все установленные пакеты до последних версий
Зачем: Это стандартная práctica безопасности перед установкой нового ПО.
2. 📦 Установка Apache
2.1 Установка пакета
sudo apt install apache2 -y
Что делает: Устанавливает Apache2 из официальных репозиториев Debian.
2.2 Проверка версии
sudo apache2ctl -v
Что делает: Показывает установленную версию Apache. sudo нужен, потому что apache2ctl находится в /usr/sbin.
✅ Ожидаемый вывод в терминале (Debian 13):
Server version: Apache/2.4.66 (Debian)
Какие версии в разных Debian (актуальные на момент написания):
| Версия Debian | Кодовое имя | Версия Apache |
|---|---|---|
| Debian 13 (Trixie) | trixie | 2.4.66 |
| Debian 12 (Bookworm) | bookworm | 2.4.66 |
| Debian 11 (Bullseye) | bullseye | 2.4.66 |
2.3 Проверка статуса сервиса и слушателя порта
Проверка статуса сервиса:
systemctl status apache2 --no-pager
✅ Ожидаемый вывод в терминале (сокращённо):
● apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled)
Active: active (running)
Важно: Имя сервиса — apache2, не httpd.
Проверка, что Apache слушает порт 80:
sudo ss -ltnp 'sport = :80'
✅ Ожидаемый вывод:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("apache2",pid=1234,fd=4))
3. 🔥 Настройка UFW (фаервол)
⚠️ Важно: Если вы настраиваете сервер удалённо (по SSH), сначала разрешите SSH, иначе потеряете доступ.
3.1 Разрешить SSH
sudo ufw allow ssh
3.2 Проверка доступных профилей UFW
Перед открытием портов посмотрите, какие профили доступны:
sudo ufw app list | grep -E 'Apache|WWW'
✅ Ожидаемый вывод (Debian 13):
Apache
Apache Full
Apache Secure
✅ Ожидаемый вывод (Debian 12/11):
WWW
WWW Cache
WWW Full
WWW Secure
3.3 Включить UFW
sudo ufw enable
3.4 Открыть порты HTTP и HTTPS
Для Debian 13 (Trixie):
sudo ufw allow 'Apache Full'
Для Debian 12 (Bookworm) и Debian 11 (Bullseye):
sudo ufw allow 'WWW Full'
Что делают эти профили: Открывают оба порта — 80 (HTTP) и 443 (HTTPS).
Если вы хотите открыть только HTTP (порт 80):
- Debian 13:
sudo ufw allow 'Apache' - Debian 12/11:
sudo ufw allow 'WWW'
3.5 Проверка правил
sudo ufw status
✅ Ожидаемый вывод (Debian 13):
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
Apache Full ALLOW Anywhere
4. 📝 Создание виртуального хоста (Virtual Host)
Виртуальные хосты позволяют обслуживать несколько доменов на одном сервере.
4.1 Создание корневой директории сайта
sudo mkdir -p /var/www/example.com/html
4.2 Назначение прав
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www/example.com
4.3 Создание тестовой страницы
nano /var/www/example.com/html/index.html
Добавьте:
<html>
<head>
<title>Welcome to example.com</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
4.4 Создание конфигурации виртуального хоста
sudo nano /etc/apache2/sites-available/example.com.conf
Добавьте:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
4.5 Активация виртуального хоста
sudo a2dissite 000-default.conf
sudo a2ensite example.com.conf
Что делает: Отключает стандартный сайт по умолчанию и включает ваш.
4.6 Проверка конфигурации
sudo apache2ctl configtest
✅ Ожидаемый вывод: Syntax OK
4.7 Перезагрузка Apache
sudo systemctl reload apache2
5. 🔐 SSL-сертификат Let’s Encrypt (HTTPS)
5.1 Установка Certbot и плагина для Apache
sudo apt install python3-certbot-apache -y
5.2 Получение сертификата
sudo certbot --apache --agree-tos --redirect --email admin@example.com -d example.com -d www.example.com
Что делает: Получает сертификат, настраивает HTTPS и редирект с HTTP.
5.3 Проверка автоматического обновления
sudo systemctl status certbot.timer
6. 📊 Мониторинг Apache (опционально)
6.1 Включение модуля статуса
Модуль mod_status показывает live-информацию о работе сервера.
sudo a2enmod status
sudo systemctl reload apache2
6.2 Доступ к статусу
По умолчанию доступ к /server-status разрешён только с локального хоста. Откройте в браузере:
http://your_server_ip/server-status
6.3 Просмотр уникальных IP-адресов из логов
sudo awk '{print $1}' /var/log/apache2/access.log | sort | uniq | head -20
6.4 Поиск конкретных ошибок в логах
sudo grep "404" /var/log/apache2/error.log
sudo grep "403" /var/log/apache2/error.log
7. 🛠️ Управление Apache
| Команда | Что делает |
|---|---|
sudo systemctl reload apache2 | Перезагружает конфигурацию без потери соединений (после изменения конфигов) |
sudo systemctl restart apache2 | Полностью перезапускает сервер (после обновления модулей) |
sudo systemctl start apache2 | Запускает сервер |
sudo systemctl stop apache2 | Останавливает сервер |
systemctl status apache2 | Показывает статус сервера |
sudo apache2ctl configtest | Проверяет конфигурацию на синтаксические ошибки |
sudo tail -f /var/log/apache2/error.log | Просмотр логов ошибок в реальном времени |
8. ⚠️ Решение типичных проблем
8.1 Ошибка: Address already in use (порт 80 или 443 занят)
Симптом: Apache не запускается, systemctl status apache2 показывает failed.
Причина: Другой веб-сервер (например, Nginx) уже слушает порт 80 или 443.
Решение: Остановите конфликтующий сервис:
sudo systemctl stop nginx
sudo systemctl start apache2
8.2 Ошибка: 403 Forbidden
Симптом: При открытии сайта возвращается 403 Forbidden.
Причина: Неправильные права на директорию с сайтом.
Решение: Проверьте права:
ls -la /var/www/example.com/html/
Директории должны иметь права 755, файлы — 644. Исправьте:
sudo chmod 755 /var/www/example.com /var/www/example.com/html
sudo chmod 644 /var/www/example.com/html/index.html
8.3 Ошибка: apache2ctl configtest показывает предупреждение AH00558
Симптом: sudo apache2ctl configtest выводит:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name
Syntax OK
Причина: Не указан глобальный ServerName.
Решение: Добавьте конфигурацию:
echo 'ServerName example.com' | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo systemctl reload apache2
8.4 Ошибка: виртуальный хост показывает страницу по умолчанию
Симптом: Вместо вашего сайта открывается страница «Apache2 Debian Default Page».
Причина: Виртуальный хост не активирован, или стандартный сайт не отключён.
Решение: Убедитесь, что стандартный сайт отключён:
ls /etc/apache2/sites-enabled/
Не должно быть 000-default.conf. Если есть — отключите:
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
9. ❌ Удаление Apache
9.1 Удаление пакетов
sudo systemctl stop apache2
sudo apt remove --purge apache2 -y
sudo apt autoremove -y
9.2 Удаление файлов конфигурации, сайтов и servername.conf
sudo rm -rf /var/www/html /var/www/example.com
sudo rm -f /etc/apache2/sites-available/example.com.conf
sudo rm -f /etc/apache2/sites-enabled/example.com.conf
sudo rm -f /etc/apache2/conf-available/servername.conf
sudo rm -f /etc/apache2/conf-enabled/servername.conf
10. 📝 Чек-лист: всё готово к работе
- [ ] Система обновлена (
sudo apt update && sudo apt upgrade -y) - [ ] Apache установлен (
sudo apache2ctl -vпоказывает версию) - [ ]
sudo ss -ltnp 'sport = :80'показывает, что Apache слушает порт 80 - [ ] UFW настроен и разрешает
Apache Full(илиWWW Full) - [ ]
systemctl status apache2показываетactive (running) - [ ] Приветственная страница Debian открывается по IP или через
localhost - [ ] Создан виртуальный хост и он работает
- [ ] SSL-сертификат получен и сайт открывается по HTTPS
Заключение
Вы установили Apache на Debian. Теперь у вас есть работающий веб-сервер. Вы можете размещать статические сайты, настраивать виртуальные хосты для нескольких доменов и защищать их с помощью SSL-сертификатов Let’s Encrypt. Главное, что нужно запомнить: при настройке UFW сначала разрешите SSH, иначе потеряете доступ. Для Debian 13 используйте профиль Apache Full, для Debian 12/11 — WWW Full. Всегда проверяйте конфигурацию через apache2ctl configtest перед перезагрузкой. Для мониторинга используйте mod_status и анализ логов через grep.
Что дальше:
- Настройте PHP для динамических сайтов
- Установите MariaDB или MySQL
- Настройте WordPress или другой CMS
- Защитите сервер с помощью Fail2Ban
- Для увеличения производительности рассмотрите установку Nginx как reverse-прокси перед Apache
Связанные статьи: