О web-разработке
и даже немного больше...

Перенаправление с HTTP на HTTPS в Nginx

Продолжая тему конфигурации Nginx сервера рассмотрим небольшой пример настройки главного зеркала сайта на HTTPS. Задача: сделать принудительное перенаправление с HTTP на HTTPS средствами конфигурации Nginx. Таким образом весь трафик на 80 порт должен будет перенаправлен на 443, который является стандартным для протокола SSL.

301 перенаправление в Nginx

Важно использовать при перенаправлении на HTTPS (по сути является главным зеркалом сайта) редирект с кодом 301. Данный код перенаправления сообщает поисковым системам, что ресурс был перемещён навсегда по-новому URL. Нужно это для того, чтобы страницы, которые уже присутствовали в поисковой выдаче, были заменены на новые адреса, без потери рейтинга. Важно использовать именно 301 редирект. В ином случае, если робот воспримет страницу как дубликат, роботы будут пытаться избавляться от подобных страниц в поиске.

Использование директивы IF в Nginx

Если вам доводилось сталкиваться с конфигурацией сервера Nginx, то вы, наверное, уже знаете, что в файлах конфигурации есть возможность использования директив IF внутри блоков конфигурации сервера. В блоке конфигурации сервера мы можем воспользоваться переменной $scheme, она содержит текущий протокол, по которому обратились к узлу. Таким образом, проверяя значение записи этой переменной, мы можем выполнить перенаправление.

if ($scheme = http) {
    return 301 https: // $ server_name $ request_uri;
}

Все HTTP-запросы будут перенаправляться на тот же узел, но уже с HTTPS-протоколом.

Отдельные блоки конфигурации для протоколов

Бытует мнение, что директива IF для сервера Nginx – это зло, и нужно стараться как можно меньше её использовать. Для таких случаев, мы можем создать отдельные блоки конфигурации узла. Один блок будет отвечать за прослушивание 80-го порта, другой будет слушать порт 443. Остаётся сделать перенаправление в блоке, который отвечает за 80 порт, на порт 443.

# port 80
server {
    listen 80;
    listen [::]:80;
    server_name href.info;
    return 301 https://$server_name$request_uri;
}

# port 443
server {
    listen   443 default_server ssl;
    server_name href.info;
    ssl_certificate /path/to/your/ssl/cert;
    ssl_certificate_key /path/to/your/ssl/key;
}

Запись конечно получилась значительно больше, но этот метод считается более «шустрым». Как уже упоминалось выше, работает это таким образом. Если приходят запросы на 80 порт, то происходит перенаправление запроса на HTTPS с кодом 301. Если же запрос приходит сразу на 443 порт, то блок отрабатывает уже как узел «по умолчанию», об этом так же говорит параметр «default_server».
Для небольших проектов это не так существенно, можно использовать как первый пример, так и второй.

Для того чтобы изменения были сохранены, необходимо перезапустить сервер. Однако перед его перезапуском следует проверить файл конфигурации Nginx на наличие синтаксических ошибок командой:

nginx -c /etc/nginx/nginx.conf –t

Если вы допустили ошибку в файле конфигурации, это не даст серверу «упасть» во время перезагрузки.

Опубликован: 09.02.2021 г.

См. также:

Преимущества и недостатки веб-серверов Nginx и Apache
Тестирование файла конфигурации Nginx
Как отключить журнал запросов в Nginx?
Как включить сжатие GZip в Nginx?
Конвертация htaccess в Nginx
Не работает вебвизор, что делать?
Настройка заголовков Expires в Nginx
Блокирование ботов в Nginx

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

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

Комментарии
  • Загрузка...
Друзья сайта