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

12 set 2022 3 min di lettura
Как перенаправить HTTP на HTTPS на Apache
Indice dei contenuti

Введение

Apache HTTP Server — один из самых популярных веб-серверов в мире. Это кроссплатформенный 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 необходимо перезапустить или перезагрузить, чтобы изменения вступили в силу:

Дебиан и Убунту:

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 на виртуальном хосте домена.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.