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