Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Безпека

Як перенаправити HTTP на HTTPS на Linux з Nginx (Повний посібник)

Захист вашого веб-сайту за допомогою HTTPS більше не є опціональним — це фундаментальна вимога для захисту даних користувачів, збереження довіри та досягнення сильних рейтингів SEO. Пошукові системи, такі як Google, активно штрафують незашифровані сайти HTTP, тоді як сучасні браузери позначають їх як "Небезпечно." Перенаправлення всього трафіку HTTP на HTTPS гарантує, що кожен відвідувач автоматично потрапляє на зашифровану версію вашого сайту без будь-якого ручного втручання.

Цей комплексний посібник проведе вас через весь процес: розуміння різниці між HTTP та HTTPS, встановлення безплатного SSL-сертифіката через Let’s Encrypt, налаштування постійного перенаправлення 301 у Nginx та перевірка того, що все працює правильно на вашому сервері Linux.

1. HTTP vs. HTTPS: Яка різниця?

Перед тим як перейти до конфігурації, важливо зрозуміти, чому це перенаправлення має значення.

HTTP (Hypertext Transfer Protocol)

HTTP — це базовий протокол, який використовується для передачі даних між веб-браузером та сервером. Однак він передає всі дані у відкритому вигляді, що означає, що будь-яка інформація — облікові дані входу, деталі платежів, персональні дані — може бути перехоплена зловмисниками за допомогою атаки “людина посередині” (MITM). HTTP не забезпечує шифрування, автентифікацію або гарантії цілісності даних.

HTTPS (HTTP Secure)

HTTPS — це безпечне розширення HTTP. Він обертає стандартний протокол HTTP всередину SSL/TLS шифрування, створюючи зашифрований канал між клієнтом та сервером. Це забезпечує:

  • Конфіденційність — дані не можуть бути прочитані третіми сторонами під час передачі.
  • Цілісність — дані не можуть бути змінені під час передачі.
  • Автентифікація — користувачі можуть перевірити, що вони спілкуються з легітимним сервером.
  • Переваги для SEO — Google використовує HTTPS як сигнал рейтингу, надаючи безпечним сайтам вимірювану перевагу.
  • Довіра браузера — Chrome, Firefox та Edge відображають значок замка для сайтів HTTPS та попередження “Не безпечно” для сайтів HTTP.

Суть: запуск веб-сайту без HTTPS в сучасному середовищі — це серйозний ризик безпеки та бізнесу.

2. Передумови

Перед тим, як слідувати цьому посібнику, переконайтеся, що у вас є наступне:

  • Linux сервер (Ubuntu 20.04/22.04, Debian 11/12 або подібний) з Nginx
  • Зареєстроване доменне ім’я, спрямоване на IP-адресу вашого сервера
  • Доступ root або sudo до вашого сервера
  • Базові знання командного рядка Linux

Якщо ви шукаєте надійне серверне середовище для розміщення вашого веб-сайту, VPS Hosting від AlexHost надає повністю керовані та некеровані плани Linux VPS, оптимізовані для веб-додатків, з SSD сховищем та високодоступною мережею.

Вам також знадобиться дійсний SSL сертифікат. Цей посібник використовує безплатний сертифікат Let’s Encrypt від центру сертифікації через Certbot. Якщо вам потрібен сертифікат з розширеною перевіркою (EV) або перевіркою організації (OV) для комерційного використання, розгляньте SSL Сертифікати від AlexHost.

3. Крок 1: Встановлення SSL-сертифіката за допомогою Let’s Encrypt

Let’s Encrypt — це безкоштовний, автоматизований та відкритий центр сертифікації. Certbot — це офіційний клієнт, який автоматизує процес отримання та поновлення SSL/TLS-сертифікатів від Let’s Encrypt і налаштування вашого веб-сервера.

Встановлення Certbot та плагіна Nginx

Оновіть індекс пакетів і встановіть Certbot разом з плагіном Nginx:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Отримання та встановлення вашого SSL-сертифіката

Запустіть Certbot з прапором --nginx, щоб автоматично отримати сертифікат і налаштувати Nginx для його використання:

sudo certbot --nginx -d example.com -d www.example.com

Замініть example.com на вашу фактичну назву домену. Certbot буде:

  1. Перевіряти право власності на домен через виклик ACME
  2. Отримувати підписаний сертифікат від Let’s Encrypt
  3. Автоматично змінювати конфігурацію Nginx для включення HTTPS на порту 443
  4. За бажанням налаштовувати автоматичне перенаправлення HTTP на HTTPS (ви можете пропустити цей крок у Certbot і налаштувати його вручну, як показано нижче, для повного контролю)

Включення автоматичного поновлення сертифіката

Сертифікати Let’s Encrypt закінчуються кожні 90 днів. Certbot встановлює таймер systemd або завдання cron для автоматичного обробки поновлень. Переконайтеся, що він активний:

sudo systemctl status certbot.timer

Ви також можете виконати тестове поновлення в режимі dry-run:

sudo certbot renew --dry-run

4. Крок 2: Налаштування Nginx для перенаправлення HTTP на HTTPS

Після встановлення SSL-сертифіката вам потрібно налаштувати Nginx для постійного перенаправлення всього трафіку HTTP (порт 80) на HTTPS (порт 443). Це робиться за допомогою перенаправлення 301 Moved Permanently, яке є правильним типом перенаправлення для SEO — воно передає вагу посилання на HTTPS-версію ваших сторінок.

Відкрийте конфігурацію блоку сервера Nginx

Конфігурації сайтів Nginx зазвичай зберігаються в /etc/nginx/sites-available/. Відкрийте файл конфігурації для вашого домену:

sudo nano /etc/nginx/sites-available/example.com

Налаштування блоку перенаправлення HTTP на HTTPS

Ваш файл конфігурації містить один або кілька блоків server. Знайдіть блок, який прослуховує порт 80 (HTTP), і замініть або оновіть його таким правилом перенаправлення:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Permanently redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}

Ваш блок сервера HTTPS (порт 443), який Certbot, ймовірно, налаштував автоматично, повинен виглядати приблизно так:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/example.com/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

> Чому використовувати return 301 замість rewrite?

> Директива return 301 швидша та ефективніша, ніж правило rewrite. Вона негайно повертає відповідь перенаправлення без необхідності Nginx обробляти додаткові блоки розташування, зменшуючи навантаження на сервер та покращуючи час відповіді.

Розуміння директиви перенаправлення

КомпонентПояснення
listen 80Nginx прослуховує вхідні з’єднання на HTTP-порту 80
listen [::]:80Включає підтримку IPv6 на порту 80
server_nameВизначає, до яких імен доменів застосовується цей блок
return 301Видає постійне перенаправлення (найкраще для SEO)
https://$hostЗберігає оригінальне ім’я хоста в перенаправленні
$request_uriЗберігає повний оригінальний шлях URI та рядок запиту

5. Крок 3: Тестування конфігурації Nginx

Ніколи не перезавантажуйте та не перезапускайте Nginx без попереднього тестування конфігурації. Синтаксична помилка у файлі конфігурації призведе до того, що Nginx не запуститься, і ваш веб-сайт буде недоступний.

Запустіть вбудований тест конфігурації Nginx:

sudo nginx -t

Успішний тест видає такий результат:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Якщо ви бачите будь-які помилки, уважно перегляньте результат. Nginx вказує файл і номер рядка, де була виявлена проблема. Поширені проблеми включають:

  • Відсутні крапки з комою в кінці директив
  • Незакриті фігурні дужки {}
  • Неправильні шляхи до файлів SSL-сертифікатів
  • Дублювання записів server_name

Виправте всі повідомлені помилки перед продовженням.

6. Крок 4: Перезавантажте Nginx для застосування змін

Після того як тест конфігурації пройде успішно, перезавантажте Nginx для застосування ваших змін. Використання reload замість restart є переважним, оскільки воно застосовує нову конфігурацію плавно без розривання активних з’єднань:

sudo systemctl reload nginx

Щоб підтвердити, що Nginx працює правильно після перезавантаження:

sudo systemctl status nginx

Ви повинні побачити active (running) у виводі.

7. Крок 5: Перевірка роботи перенаправлення

З перезавантаженим Nginx настав час підтвердити, що перенаправлення працює правильно.

Метод 1: Тест у браузері

  1. Відкрийте веб-браузер.
  2. Перейдіть на http://example.com (використовуючи HTTP, а не HTTPS).
  3. Спостерігайте, як браузер автоматично перенаправляє вас на https://example.com.
  4. Підтвердьте, що в адресному рядку з’являється значок замка, що вказує на дійсне SSL-з’єднання.

Метод 2: Тест командного рядка з curl

Використовуйте curl з прапором -I для отримання лише заголовків HTTP-відповіді без завантаження тіла сторінки:

curl -I http://example.com

Правильно налаштоване перенаправлення дає таку відповідь:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-alive

Ключові показники для перевірки:

  • Код статусу 301 Moved Permanently — Підтверджує, що постійне перенаправлення встановлено.
  • Location: https://example.com/ — Підтверджує, що трафік перенаправляється на версію HTTPS.

Метод 3: Онлайн-перевірка перенаправлення

Ви також можете використовувати безплатні онлайн-інструменти, такі як redirect-checker.org або httpstatus.io, щоб відстежити повний ланцюг перенаправлення та підтвердити, що немає циклів перенаправлення або непотрібних переходів.

8. Поширені проблеми та усунення несправностей

Цикл перенаправлення

Симптом: Браузер відображає помилку "Занадто багато перенаправлень".

Причина: Ваш блок сервера HTTPS також запускає перенаправлення назад на HTTP, створюючи нескінченний цикл.

Виправлення: Переконайтеся, що директива return 301 існує лише у блоці сервера HTTP (порт 80), а не у блоці HTTPS (порт 443).

Попередження про змішаний вміст

Симптом: Значок замка показує попередження навіть після того, як перенаправлення працює.

Причина: Ваші HTML-сторінки все ще посилаються на ресурси HTTP (зображення, скрипти, таблиці стилів) за допомогою http:// URL-адрес.

Виправлення: Оновіть усі внутрішні URL-адреси ресурсів, щоб використовувати https:// або URL-адреси без протоколу (//). Для сайтів WordPress використовуйте плагін Really Simple SSL.

SSL-сертифікат не знайдено

Симптом: Nginx не запускається з помилкою про відсутні файли сертифіката.

Причина: Шляхи, вказані в ssl_certificate та ssl_certificate_key, не відповідають фактичним розташуванням файлів сертифіката.

Виправлення: Перевірте шляхи сертифіката за допомогою:

sudo ls /etc/letsencrypt/live/example.com/

Certbot Renewal не вдається

Симптом: Автоматичне поновлення не вдається з помилкою підключення.

Причина: Порт 80 може бути заблокований брандмауером, що перешкоджає завершенню HTTP-01 виклику Let’s Encrypt.

Виправлення: Переконайтеся, що порт 80 відкритий у вашому брандмауері:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

9. Висновок

Перенаправлення HTTP на HTTPS на вашому Linux сервері за допомогою Nginx — це простий, але критично важливий завдання конфігурації. Реалізуючи постійне перенаправлення 301, ви гарантуєте, що кожен відвідувач — незалежно від того, як він отримує доступ до вашого сайту — автоматично отримує зашифровану, безпечну версію. Це захищає конфіденційні дані користувачів, будує довіру відвідувачів, задовольняє вимоги безпеки сучасних браузерів і забезпечує вимірюваний SEO-бенефіт.

Для повторення ключових кроків, розглянутих у цьому посібнику:

  1. Встановіть Certbot і отримайте безплатний SSL сертифікат від Let's Encrypt.
  2. Налаштуйте блок HTTP сервера Nginx з return 301 перенаправленням на HTTPS.
  3. Протестуйте вашу конфігурацію за допомогою sudo nginx -t перед застосуванням змін.
  4. Перезавантажте Nginx за допомогою sudo systemctl reload nginx.
  5. Перевірте перенаправлення за допомогою вашого браузера, curl або онлайн-перевірки перенаправлення.
  6. Моніторьте поновлення сертифіката, щоб переконатися, що ваш SSL сертифікат ніколи не закінчиться.

Для найкращих результатів запустіть ваш веб-сервер Nginx на високопродуктивній та надійній платформі хостингу. AlexHost пропонує VPS Hosting з повним root доступом, SSD NVMe сховищем та гнучкими дистрибутивами Linux — ідеально для хостингу веб-сайтів на базі Nginx. Якщо вам потрібне попередньо налаштоване середовище панелі керування, дослідіть VPS з cPanel або переглядайте всі доступні VPS Control Panels, щоб знайти правильний інтерфейс управління для вашого робочого процесу. Для високотрафікових або ресурсоємних додатків Dedicated Servers забезпечують максимальну продуктивність та ізоляцію, яких вимагає ваша інфраструктура.

Регулярно перевіряйте дійсність вашого SSL сертифіката, тримайте Nginx в актуальному стані та періодично переглядайте конфігурацію безпеки вашого сервера, щоб підтримувати надійну та надійну веб-присутність.