
Для настройки редиректа с 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