Перенаправить HTTP на HTTPS в Apache

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

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

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

Использование HTTPS над HTTP дает множество преимуществ, например:

  • Все данные зашифрованы в обоих направлениях. В результате конфиденциальная информация не может быть прочитана в случае перехвата.
  • Google Chrome и все другие популярные браузеры пометят ваш сайт как безопасный.
  • HTTPS позволяет использовать протокол HTTP / 2, что значительно повышает производительность сайта.
  • Google отдает предпочтение HTTPS-сайтам. Ваш сайт будет лучше ранжироваться, если обслуживается через HTTPS.

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

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

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

Виртуальные хосты Apache определяют настройки одного или нескольких доменов, размещенных на сервере. В директиве виртуального хоста вы можете указать корень документа сайта (каталог, содержащий файлы веб-сайта), создать отдельную политику безопасности для каждого сайта, использовать разные сертификаты 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.com
  ServerAlias www.example.com

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

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

  Protocols h2 http/1.1

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

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

  • VirtualHost *:80 — Сервер Apache прослушивает входящие соединения на порту 80 (HTTP) для указанного домена.
  • VirtualHost *:443 — Сервер Apache прослушивает входящие соединения на порту 443 (HTTPS) для указанного домена.

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

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

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

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

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

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

  Protocols h2 http/1.1

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

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

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

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

  • Debian и Ubuntu:

     sudo systemctl reload apache2
  • CentOS и Fedora:

     sudo systemctl reload httpd

Перенаправить HTTP на HTTPS с помощью .htaccess

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

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

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

Чтобы перенаправить весь HTTP-трафик на HTTPS, откройте корневой файл .htaccess и добавьте в него следующий код:

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

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

  • RewriteEngine On — включает возможности перезаписи.
  • RewriteCond %{HTTPS} off — проверяет наличие HTTP-соединения, и если условие выполняется, выполняется следующая строка.
  • RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] — перенаправить HTTP на HTTPS с кодом статуса 301 (перемещен навсегда). Убедитесь, что вы изменили доменное имя.

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

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

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

Выводы

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

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

Оставьте комментарий