Часто боты поисковиков хранят у себя закешированную информацию о страницах сайта, что приводит пользователя к пустой странице или пользователь переходит по небезопасному протоколу HTTP вместо шифрованного HTTPS.
Для этих случаев существует перенаправление или редирект с одной страницы сайта на другие домен/страницу, реализовать его можно на разных этапах. В данном материале рассмотрим основные способы и случаи!
Редирект с HTTP на HTTPS
Подключение по HTTP протоколу давно не считается эталонном безопасной коммуникации, поэтому многие сервисы уже используют повышение до HTTPS, шифрованного соединения поверх классического.
В Apache и Nginx существуют правила, которые позволяют управлять виртуальными хостами и сервером в целом. Для настройки подобного повышения URL-схемы с HTTP до HTTPS, необходимо перейти в конфигурационные файлы виртуального хоста и настроить правила обработки трафика:
По умолчанию, конфигурационный файл называется default, если в вашем случае по-другому, то замените его. Добавьте конфигурацию:
listen 80;
server_name example.com;
return 301 https://$host;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/keys/subkeys/certificate.crt;
ssl_certificate_key /etc/nginx/keys/subkeys/private.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
Виртуальные хосты разделены на логические блоки server, где внутри содержат политики обработки трафика. Таким образом, если первый блок получает сетевой пакет на порт 80, что классически HTTP, то он вернет директивой return 301 требование браузеру зайти на сайт, который уже будет с схемой HTTPS.
Обратите внимание, что кроме классических настроек добавляется заголовок Strict-Transport-Security, который выдает браузерам пользователей метку, о том что необходимо принудительно устанавливать HTTPS соединение вместо не безопасного. Данная функция позволяет митигировать атаку HTTP downgrade, которая позволяет снизить подключение клиента до небезопасного протокола, без аутентификации и проверок целостности, технически тем же return 301!
Проверим работоспособность нашего сервиса и настроенного ранее редиректа:
Однако если мы не хотим отправлять пользователю коды о перенаправлении, то существуют отличная альтернатива внутреннего редиректа.
Внутренний редирект
Для обработки трафика в nginx существует целый массив директив, который позволяет реализовать еще одно перенаправление. В данном случае веб-сервер самостоятельно внутри себя перенаправит запрос и обработает его выдав корректный ответ. Синтаксис директивы представлен следующим образом:
listen 80;
server_name example.com;
location / {
internal_redirect @check_antivirus;
}
location @check_antivirus {
internal;
root /var/www/html
}
location /url {
internal_redirect /newurl;
}
location /newurl {
internal;
root /var/www/html
}
}
В данном примере, когда трафик приходит на пути / и /url, то произойдет внутреннее перенаправление на другой путь с сохранением оставшейся части пакета. К примеру ваш запрос был по пути /url/new/id?customer=675, а станет /newurl/new/id?customer=675. Примеры указывают, что можно использовать именованный @location или путь. После внесения изменений, не забывайте проверить конфигурацию командой:
Сама логика редиректа может хранится не только на сервере, но и в передаваемых JS/HTML формах!
Перенаправление через HTML/JS
Чтобы реализовать логику перенаправления в браузере необходимо использовать директивы вида:
<meta http-equiv="refresh" content="0;URL=http://site.ru" />
</head>
Фактически в браузере существует обработчик, который позволяет считать строки в HTML и в соответствии с директивами выполнить действие, в данном случае, заложена директива перенаправления. Где http-equiv=”refresh” указывает на необходимость перезагрузки страницы, content=”0;URL=http://site.ru” через 0 секунд по URL вида http://site.ru.
Для JS существует набор функций, которые могу позволить клиенту самостоятельно подключиться к иному ресурсу, в данном случае функционал более обширный:
В строке представлено прямое перенаправление без условий, где открывается новое соединение, вместо уже существующего. А во втором случае ниже, должно выполниться логическое условие, которое, так же перенаправит пользователя.
Возможности в вебе по управлению логикой обработки трафика, максимально обширны, на каждом их этапов, начиная от браузера и его обработчиков HTML/JS, заканчивая веб-сервером с директивами! Для выполнения тестов, вы можете использовать изолированную среду VPS сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать.
Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов.