
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 как показано в примере ниже:
*:80 > ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ *:443 > ServerName example.com ServerAlias www.example.com Protocols h2 http/1.1 # SSL Configuration # Other Apache Configuration
Давайте разберём код. Мы используем две директивы виртуального хоста: одну для HTTP- и одну для HTTPS-версии сайта.
-
VirtualHost *:80— сервер Apache прослушивает входящие соединения на порту 80 (HTTP) для указанного домена. -
VirtualHost *:443— сервер Apache прослушивает входящие соединения на порту 443 (HTTPS) для указанного домена.
Директивы ServerName и ServerAlias указывают доменные имена виртуального хоста. Убедитесь, что вы заменили их на ваше доменное имя.
Выделенная строка Redirect permanent / https://example.com/ внутри виртуального хоста HTTP перенаправляет трафик на HTTPS-версию сайта.
Обычно также требуется перенаправить HTTPS-версию сайта с www на версию без www и наоборот. Вот пример конфигурации:
*:80 > ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ *:443 > ServerName example.com ServerAlias www.example.com Protocols h2 http/1.1 "%{HTTP_HOST} == 'www.example.com'" > Redirect permanent / https://example.com/ # SSL Configuration # Other Apache Configuration
Код внутри виртуального хоста 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 на виртуальном хосте домена.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства
- Защитите Apache с помощью Let's Encrypt в Ubuntu 20.04
- Как принудительно включить HTTPS с помощью .htaccess
- Как настроить виртуальные хосты Apache в Ubuntu 20.04
- Как установить Apache в Ubuntu 20.04
- Как настроить виртуальные хосты Apache в Debian 10
- Как настроить виртуальные хосты Apache на CentOS 8
- Как установить и настроить Redmine на CentOS 8