2026-09-19
Настройка Apache + SSL: включаем HTTPS на сайте

Настройка 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *