ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Перенаправление HTTP на HTTPS в Apache

Перенаправление HTTP на HTTPS в Apache

HTTP-сервер Apache является одним из самых популярных веб-серверов в мире. Это кросс-платформенный HTTP-сервер с открытым исходным кодом, который обслуживает большой процент веб-сайтов в Интернете. Apache предоставляет множество мощных функций, которые можно расширить с помощью дополнительных модулей.

Если вы являетесь владельцем сайта или системным администратором, скорее всего, вы имеете дело с Apache на регулярной основе. Одна из наиболее распространенных задач, которые вы, вероятно, будете выполнять, – это перенаправление трафика HTTP на защищенную (HTTPS) версию вашего сайта.

В отличие от HTTP, где запросы и ответы отправляются и возвращаются в виде открытого текста, HTTPS использует TLS/SSL для шифрования связи между клиентом и сервером.

Есть много преимуществ использования HTTPS над HTTP, таких как:

В этой статье рассказывается, как перенаправить HTTP-трафик на HTTPS в Apache.

Есть несколько способов перенаправить на HTTPS в Apache. Если у вас есть root-доступ к серверу Linux, на котором работает Apache, предпочтительным способом является настройка перенаправления в файле конфигурации виртуального хоста домена. В противном случае вы можете настроить перенаправление в файле .htaccess домена.

Некоторые панели управления, такие как cPanel, позволяют принудительно перенаправлять HTTPS несколькими щелчками мыши.

 

Перенаправить HTTP на HTTPS с помощью виртуального хоста

Apache Virtual Hosts определяет настройки одного или нескольких доменов, размещенных на сервере. В директиве виртуального хоста вы можете указать корневой каталог документа сайта (каталог, содержащий файлы сайта), создать отдельную политику безопасности для каждого сайта, использовать разные сертификаты SSL, настроить перенаправление и многое другое.

Обычно, когда сертификат SSL установлен в домене, у вас будет две директивы виртуального хоста для этого домена. Первый – для HTTP-версии сайта на порту 80, а второй – для HTTPS-версии на порту 443.

В дистрибутивах Red-Hat, таких как CentOS и Fedora, файлы виртуальных хостов хранятся в /etc/httpd/conf.d. В Debian и его производных, таких как Ubuntu, файлы хранятся в каталоге /etc/apache2/sites-available.

Чтобы перенаправить веб-сайт на HTTPS, используйте директиву Redirect, как показано в примере ниже:

<VirtualHost *:80> 
  ServerName example.ru
  ServerAlias www.example.ru

  Redirect permanent / https://example.ru/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.ru
  ServerAlias www.example.ru

  Protocols h2 http:/1.1

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

 

Давайте объясним код. Мы используем две директивы виртуального хоста, одну для HTTP и одну для HTTPS-версии сайта.

Директивы ServerName и ServerAlias с указанием доменных имен виртуального хоста. Убедитесь, что вы заменили его своим доменным именем.

Выделенная строка Redirect permanent / https://example.ru/ внутри виртуального хоста HTTP перенаправляет трафик на HTTPS-версию сайта.

Как правило, вы также хотите перенаправить HTTPS www-версию сайта на не-www или наоборот. Вот пример конфигурации:

<VirtualHost *:80> 
  ServerName example.ru
  ServerAlias www.example.ru

  Redirect permanent / https://example.ru/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.ru
  ServerAlias www.example.ru

  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.example.ru'">
    Redirect permanent / https://example.ru/
  </If>

  # Конфигурации SSL

  # Другие Конфигурация Apache

</VirtualHost>

Код внутри виртуального хоста HTTPS (выделенные строки) проверяет, содержит ли заголовок запроса домен www и перенаправляет его на версию без www.

Всякий раз, когда вы вносите изменения в файлы конфигурации, вам нужно перезапустить или перезагрузить службу Apache, чтобы изменения вступили в силу:

 

Перенаправить HTTP на HTTPS, используя .htaccess

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

Обычно файл .htaccess помещается в корневой каталог домена, но вы можете иметь другие файлы .htaccess в подкаталогах.

Этот метод требует, чтобы модуль mod_rewrite был загружен на сервер Apache. Этот модуль загружается по умолчанию на большинстве серверов. Если возможно, предпочтите создание перенаправления на виртуальном хосте, потому что это проще и безопаснее.
Чтобы перенаправить весь HTTP-трафик на HTTPS, откройте корневой файл .htaccess и добавьте в него следующий код:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.ru/$1 [L,R=301]

 

Вот что означает код:

В приведенном ниже примере есть дополнительное условие, которое проверяет, начинается ли запрос www. Используйте его, чтобы заставить всех посетителей использовать HTTPS-версию сайта без www:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.ru/$1 [L,R=301]

 

При редактировании файла .htaccess вам не нужно перезагружать сервер, потому что Apache читает файл при каждом запросе.

 

Вывод

В Apache предпочтительным способом перенаправления HTTP на HTTPS является настройка перенаправления 301 на виртуальном хосте домена.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Exit mobile version