Переадресация HTTP to HTTPS in Nginx

Переадресация HTTP to HTTPS in Nginx

18 Декабря 2019 | CentOS

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

Переадресация HTTP to HTTPS in Nginx

В этом руководстве мы объясним, как перенаправить 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 , так как это может привести к непредсказуемому поведению сервера.

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

server {
    listen 80;
    listen [::]:80;
    server_name linuxize.com www.linuxize.com;
    return 301 https://linuxize.com$request_uri;
}


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

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

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

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

server {
    listen 80;
    listen [::]:80;
    server_name linuxize.com www.linuxize.com;
    return 301 https://linuxize.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.linuxize.com;

    # . . . other code

    return 301 https://linuxize.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name linuxize.com;

    # . . . other code
}


Если все веб-сайты, размещенные на сервере, настроены на использование 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.


После того, как на вашем сайте установлен SSL-сертификат, вы должны перенаправить HTTP-трафик на HTTPS.

    Комментарии

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

Загрузка комментариев...