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

Nginx перенаправляет HTTP на HTTPS

В этом руководстве мы объясним, как перенаправить HTTP-трафик на HTTPS в Nginx.

Nginx (произносится как «engine x») — это бесплатный высокопроизводительный HTTP- и обратный прокси-сервер с открытым исходным кодом, отвечающий за обработку нагрузки некоторых крупнейших сайтов в Интернете.

Если вы разработчик или системный администратор, скорее всего, вы регулярно работаете с Nginx. Одна из самых распространённых задач, которую вы, вероятно, будете выполнять, — это перенаправление HTTP-трафика на защищённую (HTTPS) версию вашего сайта.

В отличие от HTTP, где запросы и ответы отправляются и возвращаются в виде открытого текста, HTTPS использует TLS/SSL для шифрования связи между клиентом и сервером.

Использование HTTPS по сравнению с HTTP имеет множество преимуществ, например:

  • Все данные шифруются в обоих направлениях. Благодаря этому конфиденциальная информация не может быть прочитана в случае перехвата.
  • Google Chrome и все другие популярные браузеры отметят ваш сайт как безопасный.
  • HTTPS позволяет использовать протокол HTTP/2, что значительно повышает производительность сайта.
  • Google отдаёт предпочтение сайтам с HTTPS-протоколом. Ваш сайт будет ранжироваться лучше, если будет работать по HTTPS.

Предпочтительный способ перенаправления HTTP на HTTPS в Nginx — настроить отдельный блок сервера для каждой версии сайта. Следует избегать перенаправления трафика с помощью директивы if , так как это может привести к непредсказуемому поведению сервера.

Перенаправление HTTP на HTTPS для каждого сайта

Обычно при установке SSL-сертификата на домене для него создаются два серверных блока: один для HTTP-версии сайта на порту 80, а другой — для HTTPS-версии на порту 443.

Чтобы перенаправить отдельный веб-сайт на HTTPS, откройте файл конфигурации домена и внесите следующие изменения:

 server { listen 80 ; server_name linuxgazette.ru www.linuxgazette.ru ; return 301 https://linuxgazette.ru $request_uri ; }

Давайте разберем код построчно:

  • listen 80 — серверный блок будет прослушивать входящие соединения на порту 80 для указанного домена.
  • server_name linuxgazette.ru www.linuxgazette.ru — Указывает доменные имена блока сервера. Обязательно замените их на ваше доменное имя.
  • return 301 https://linuxgazette.ru$request_uri — перенаправить трафик на HTTPS-версию сайта. Переменная $request_uri — это полный исходный URI запроса, включая аргументы.

Обычно также требуется перенаправить HTTPS-версию сайта с www на версию без www и наоборот. Рекомендуемый способ перенаправления — создать отдельный блок сервера для версий с www и без www.

Например, чтобы перенаправить HTTPS-запросы www на запросы без www, можно использовать следующую конфигурацию:

 server { listen 80 ; server_name linuxgazette.ru www.linuxgazette.ru ; return 301 https://linuxgazette.ru $request_uri ; } server { listen 443 ssl http2 ; server_name www.linuxgazette.ru ; # . . . other code return 301 https://linuxgazette.ru $request_uri ; } server { listen 443 ssl http2 ; server_name linuxgazette.ru ; # . . . other code }

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

 sudo systemctl reload nginx

Перенаправить все сайты на HTTPS

Если все веб-сайты, размещённые на сервере, настроены на использование HTTPS, и вы не хотите создавать отдельный блок HTTP-сервера для каждого сайта, вы можете создать единый блок HTTP-сервера для всех запросов. Этот блок будет перенаправлять все HTTP-запросы на соответствующие блоки HTTPS.

Чтобы создать единый HTTP-блок для всех запросов, который будет перенаправлять посетителей на HTTPS-версию сайта, откройте файл конфигурации Nginx и внесите следующие изменения:

 server { listen 80 default_server ; listen [::]:80 default_server ; server_name _ ; return 301 https:// $host$request_uri ; }

Давайте проанализируем код построчно:

  • listen 80 default_server — устанавливает этот блок сервера в качестве блока по умолчанию (универсального) для всех несопоставленных доменов.
  • server_name __ — недопустимое доменное имя, которое никогда не совпадает ни с одним реальным доменным именем.
  • return 301 https://$host$request_uri — перенаправляет трафик на соответствующий блок HTTPS-сервера с кодом статуса 301 (перемещен окончательно). Переменная $host содержит доменное имя запроса.

Например, если посетитель открывает http://example.com/page2 в браузере, Nginx перенаправит запрос на https://example.com/page2 .

Если возможно, предпочтительнее создать перенаправление на уровне домена вместо глобального перенаправления с HTTP на HTTPS.

Заключение

В Nginx предпочтительным способом перенаправления HTTP на HTTPS является создание отдельных серверных блоков и выполнение 301-редирект.

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

nginx

Связанные руководства

Источник

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

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