Настройка Apache + SSL: включаем HTTPS на сайте
Apache поддерживает HTTPS через модуль mod_ssl. В этой инструкции — создание самоподписанного сертификата для тестовой среды, подключение SSL, настройка виртуального хоста и редирект с HTTP на HTTPS. Инструкция подходит для Debian/Ubuntu, Red Hat/CentOS и FreeBSD.
Для боевого сервера сертификат берут у доверенного центра сертификации или бесплатно у Let’s Encrypt.
Шаг 1. Создание сертификата
Переходим в рабочую папку.
Red Hat / CentOS:
cd /etc/httpd
Debian / Ubuntu:
cd /etc/apache2
FreeBSD:
cd /usr/local/etc/apache24
Создаём папку для сертификатов:
mkdir ssl ; cd ssl
Генерируем самоподписанный сертификат:
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key
-subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.imaxis.local/CN=test"
Созданы открытый и закрытый ключи на 4 года (1461 день); значения subj для теста могут быть любыми.
Шаг 2. Установка модуля SSL
Проверяем, подключён ли модуль:
apachectl -M | grep ssl
Если видим:
ssl_module (shared)
— переходим к шагу 3.
Иначе устанавливаем модуль.
CentOS:
yum install mod_ssl
Ubuntu/Debian:
a2enmod ssl
FreeBSD:
ee /usr/local/etc/apache24/httpd.conf
Предполагается Apache 2.4.
Раскомментируем:
LoadModule ssl_module libexec/apache24/mod_ssl.so
Include etc/apache24/extra/httpd-ssl.conf
И закомментируем:
#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin
Перезапускаем веб-сервер:
systemctl restart httpd # RPM
systemctl restart apache2 # DEB
service apache2 restart # BSD
Шаг 3. Настройка Apache
Выходим из папки ssl:
cd ..
Открываем конфигурацию виртуальных доменов.
CentOS:
vi conf.d/site.conf
Ubuntu/Debian:
vi sites-enabled/site
FreeBSD:
ee extra/httpd-vhosts.conf
Добавляем:
<VirtualHost *:443>
ServerName site.ru
DocumentRoot /var/www/apache/data
SSLEngine on
SSLCertificateFile ssl/cert.pem
SSLCertificateKeyFile ssl/cert.key
#SSLCertificateChainFile ssl/cert.ca-bundle
</VirtualHost>
где:
ServerName— домен сайта;DocumentRoot— каталог с файлами сайта;SSLCertificateFile/SSLCertificateKeyFile— пути до сгенерированных ключей;SSLCertificateChainFile— цепочка сертификатов (если сертификат не самоподписанный).
Проверяем конфигурацию:
apachectl configtest
Syntax OK
Перечитываем конфигурацию:
apachectl graceful
Шаг 4. Проверка работоспособности
Открываем сайт в браузере по https://. С самоподписанным сертификатом браузер предупредит о недоверенном соединении — подтверждаем переход. Если сайт не работает, смотрим лог в /var/log/apache или /var/log/httpd.
Шаг 5. Редирект HTTP → HTTPS
В конфигурационном файле
Дописываем в виртуальный хост:
<VirtualHost *:80>
ServerName site.ru
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
Все запросы для site.ru перенаправляются на HTTPS.
Если уже есть VirtualHost *:80 для этого сайта — закомментируйте или отредактируйте его, иначе редирект не сработает.
В .htaccess
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Модуль rewrite
CentOS:
vi /etc/httpd/conf.modules.d/00-base.conf
LoadModule rewrite_module modules/mod_rewrite.so
Если строки нет — добавьте; если закомментирована — раскомментируйте.
systemctl restart httpd
Ubuntu:
a2enmod rewrite
systemctl restart apache2
Apache + NGINX
Если перед Apache стоит NGINX (типовая схема, когда наружу смотрит NGINX), HTTP-запросы принимает именно он — тогда SSL настраивается на NGINX, а Apache работает как бэкенд.
Тонкости и подводные камни
- Самоподписанный сертификат — только для тестов; в браузере будет предупреждение. Для прода — Let’s Encrypt или коммерческий CA.
SSLCertificateChainFile— нужен для сертификатов от CA, чтобы браузер видел полную цепочку.- Отдельный
VirtualHost *:443— SSL-настройки не работают в блоке*:80. - Модуль rewrite — без него редирект на HTTPS не сработает; на Ubuntu включается
a2enmod rewrite. - NGINX перед Apache — не дублируйте SSL на обоих серверах; завершение TLS делайте на фронтенде.
apachectl configtestперед graceful — проверяйте синтаксис, чтобы не уронить сервер.
Шпаргалка
# самоподписанный сертификат
mkdir -p /etc/apache2/ssl && cd /etc/apache2/ssl
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key
-subj "/C=RU/ST=SPb/O=Test/CN=test.local"
# модуль SSL и rewrite
a2enmod ssl rewrite
systemctl restart apache2
# проверка и перезагрузка
apachectl configtest && apachectl graceful
Проверено на: Ubuntu 22.04/24.04/26.04, CentOS/Rocky, FreeBSD 14 + Apache 2.4.
Дата: Сентябрь 2026.