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 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-версии сайта.
- VirtualHost *:80 — Сервер Apache прослушивает входящие соединения через порт 80 (HTTP) для указанного домена.
- VirtualHost *:443 — Сервер Apache прослушивает входящие соединения через порт 443 (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, чтобы изменения вступили в силу:
- 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.ru/$1 [L,R=301]
Вот что означает код:
- RewriteEngine On — включает возможности перезаписи.
- RewriteCond %{HTTPS} off — проверяет HTTP-соединение и, если условие выполнено, выполняется следующая строка.
- RewriteRule ^(.*)$ https://example.ru/$1 [L,R=301]- перенаправить HTTP на HTTPS с кодом состояния 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 на виртуальном хосте домена.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.