Перенаправить HTTP на HTTPS в Nginx

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

Nginx произносится как «движок 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 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 и без www.

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

server {
    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
}

Каждый раз, когда вы вносите изменения в файлы конфигурации, вам необходимо перезапустить или перезагрузить службу 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 перенаправления.

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

Оставьте комментарий