Как настроить перенаправление трафика с HTTP на HTTPS с помощью Nginx

12 set 2022 2 min di lettura
Как настроить перенаправление трафика с HTTP на HTTPS с помощью Nginx
Indice dei contenuti

Введение

В этом руководстве мы объясним, как перенаправить 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 noviello.it www.noviello.it;
 return 301 https://noviello.it$request_uri;
 }

Разберем код построчно:

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

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

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

server {
 listen 80;
 server_name noviello.it www.noviello.it;
 return 301 https://noviello.com$request_uri;
 }

 server {
 listen 443 ssl http2;
 server_name www.noviello.it;

 #... other code

 return 301 https://noviello.it$request_uri;
 }

 server {
 listen 443 ssl http2;
 server_name noviello.it;

 #... 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.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.