Всякий народ имеет такое правительство, какого заслуживает (Ж. Местр).

4 мин для чтенияПеренаправление HTTP на HTTPS в Apache

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
4 января 2020
Перенаправление HTTP на HTTPS в Apache
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 на виртуальном хосте домена.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте также

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close