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