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 на виртуальном хосте домена.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.