Редирект с HTTP на HTTPS в Nginx

Редирект с HTTP на HTTPS в Nginx

Для настройки редиректа с http на https в Nginx нужно прописать соответствующее правило в файле конфигурации сервера. После редактирования файлов конфигурации, чтобы изменения вступили в силу, сервер каждый раз нужно перезагружать или перезапускать.

Редирект с HTTP на HTTPS для одного сайта

Для настройки редиректа сначала нужно установить SSL сертификат в домен. На домены с SSL Nginx генерирует два файла конфигурации: для доступной на 80 порте незашифрованной версии и для зашифрованной — на 443 порте. Поэтому в первом нужно будет прописать инструкции для перенаправления трафика, а вот втором — для обработки.

Первая секция конфигурации будет обрабатывать входящий трафик и перенаправлять его на 443 порт.


server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name yoursite.ru www.yoursite.ru;
    return 301 https://$server_name$request_uri;
}

Самое важное из кода:

  • listen xxx.xxx.xxx.xxx:80 default server; — прослушивание порта;
  • server_name …; — доменные имена серверного блока;
  • return 301 https://$host:443$request_uri; — адрес, куда будет перенаправлять трафик.

Вторая секция слушает запросы на 443 порт и отвечает за обработку SSL.


server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name yoursite.ru www.yoursite.ru;
    root /var/www/yoursite.ru;
    index index.php;


    ssl_certificate /path/to/your_domain.crt;
    ssl_certificate_key /path/to/your_domain.key;
    ssl_trusted_certificate /path/to/your_domain.ca-bundle;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;


    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }


    # ... остальные настройки
}

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

sudo systemctl restart nginx

Для проверки работы редиректа можно воспользоваться утилитой curl. Код ответа должен быть 200, если так, значит все работает как надо.

curl -I yoursite.ru

Редирект всех сайтов на сервере на https

Настраивать переадресацию желательно для каждого сайта отдельно, это упрощает поддержку. Но иногда использование единого блока для всех сайтов на сервере бывает оправданным, иначе такой возможности бы не существовало.

Создание общего на все сайты блока позволяет перенаправлять все запросы с http на соответствующие блоки https по единому сценарию. Код такого блока мало чем отличается от settings для каждого отдельного сайта сервера.

Важные моменты в коде:

  • listen 80 default_server; — делает блок дефолтным для всех доменов сервера;
  • servername — _; — «нейтральное» доменное имя, которое не совпадает ни с одним из существующих;
  • return 301 https://$host$request_uri — редирект со ссылки http на защищенную и полностью дублирующую https с кодом ответа сервера 301 («перемещено навсегда»).

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

sudo systemctl restart nginx
   18.08.2023 18:17:17
Автор статьи:
Гончаров Владимир Сергеевич ©
ЕЩЕ ПО ТЕМЕ

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

18.08.2023 17:55:09

Nginx входит в число самых востребованных сервисов, который известен хорошей производительностью при существенных нагрузках. Все больше и больше сайтов поддерживают протокол HTTPS, а ведущие браузерные разработчики, включая Google и Mozilla, активно поощряют владельцев сайтов, использующих данный защищенный протокол.

Сейчас переход на него — несложная задача, поскольку все топовые серверы включают поддержку SSL, а выпустить сертификат можно даже бесплатно. В данной статье рассмотрим процесс настройки SSL в Nginx с использованием сертификата Let's Encrypt.

03.08.2023 18:02:00

DNS-записи являются одним из самых важных элементов инфраструктуры Интернета. Без них пользователи не смогут получить доступ к веб-ресурсам, почте и другим сервисам. DNS-записи используются для преобразования доменных имен в IP-адреса и наоборот. В этой статье мы рассмотрим основные типы DNS-записей, способы их проверки и настройки в Linux.

31.07.2023 17:11:00

FTP (File Transfer Protocol) - это протокол передачи файлов, который используется для обмена файлами между компьютерами в сети. FTP является одним из наиболее распространенных протоколов передачи файлов в Интернете и используется для загрузки и скачивания файлов с сервера. FTP был разработан в 1971 году и с тех пор был значительно усовершенствован и расширен.

27.07.2023 17:07:00

В Linux существует два типа ссылок на файлы: символические ссылки (symbolic links) и жесткие ссылки (hard links).

25.07.2023 16:47:00