решение нестандартных проблем и не только

Блог нашего Дата-центра

делимся информацией и опытом в решении нерядовых задач

Редирект с 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 |
Рейтинг:
(0)
Автор статьи:
Гончаров Владимир Сергеевич ©

Другие статьи