Сучасні тенденції в галузі інтернету диктують умови використання безпечного протоколу зв'язку https. Так під час переходу важливо, щоб весь трафік, який приходить на порт http автоматично перенаправлявся на https. Це важлива умова не тільки для сайтів, які можуть втратити частину трафіку, а й для користувачів, щоб ні в кого не було можливості розірвати незахищене підключення. Далі розглянемо як налаштовується редирект з http на https Nginx.
Рекомендуємо використовувати перенаправлення з кодом статусу 301. Він підказує пошуковим системам або браузеру, що поточне посилання було оновлено, і його варто оновити у своїй базі, наприклад, закладок браузера. Якщо ми відкриємо конфігураційний файл, то зможемо виявити в ньому дві секції server, для сайту на https і сайту http. У секції http ви просто перенаправляєте всі запити на https за допомогою інструкції return, а в другій секції вже все обробляєте. Наприклад, перша секція:
server {
server_name losst.ru www.losst.ru;
charset off;
index index.php;
ssi on;
return 301 https://$host:443$request_uri;
set $root_path /var/www/losst/data/www/losst.ru;
root $root_path;
listen :80 default_server;
...
}
Друга секція слідує запитам на 433 порту:
server {
server_name losst.ru www.losst.ru;
ssl on;
ssl_certificate "/var/www/losst/losst.ru_le2.crtca";
ssl_certificate_key "/var/www/losst/losst.ru_le2.key";
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";
charset off;
index index.php;
set $root_path /var/www/losst/data/www/losst.ru;
root $root_path;
listen :443 default_server;
...
}
Як бачимо, синтаксис у цьому випадку гранично простий і зрозумілий. Так інструкція return дає можливість повернути необхідні коди відповіді сервера. Таким чином ми повертаємо код 301, постійний редирект, а також URL, на який збираємося перенаправити користувача. Крім директиви return, можна використовувати інструкцію rewrite, за допомогою неї виконуються ті самі дії:
rewrite ^/(.*)$ https://losst.com/$1 permanent;
У синтаксис регулярних виразів можна додати домен замість return 301. Також можна використовувати таку конструкцію без окремого блоку server:
if ($host ~* ^(losst.ru|www.losst.ru)$ ){
rewrite ^/(.*)$ https://losst.ru/$1 permanent;
}
Далі необхідно зберегти файл і перевірити конфігурацію Nginx. Для цього використовується:
$ sudo nginx -t
Якщо все Ок, перезапускаємо Nginx:
$ sudo systemctl restart nginx
Перевіряємо, яку відповідь сервера ви отримаєте за допомогою curl:
$ curl -I losst.ru
Або дозволимо утиліті пройти повний шлях з перенаправлення:
$ curl ILa losst.ru
Як бачимо, виконати налаштування редиректу на https nginx доволі просто, робота виконується додаванням одного рядка до конфігураційного файлу, все інше - додаткові параметри.