15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати
01.11.2024

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

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

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

Зміст

  1. HTTP проти HTTPS: у чому різниця?
  2. Передумови
  3. Крок 1: встановлення SSL-сертифіката за допомогою Let’s Encrypt
  4. Крок 2: налаштування Nginx для перенаправлення HTTP на HTTPS
  5. Крок 3: тестування конфігурації Nginx
  6. Крок 4: перезавантаження Nginx для застосування змін
  7. Крок 5: перевірка роботи перенаправлення
  8. Поширені проблеми та усунення неполадок
  9. Висновок

1. HTTP проти HTTPS: у чому різниця? {#http-vs-https}

Перш ніж переходити до налаштування, важливо зрозуміти, чому це перенаправлення має значення.

HTTP (Hypertext Transfer Protocol)

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

HTTPS (HTTP Secure)

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

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

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

2. Передумови {#prerequisites}

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

  • 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 {#install-ssl}

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

Ви також можете виконати тестове поновлення:

sudo certbot renew --dry-run

4. Крок 2: налаштування Nginx для перенаправлення HTTP на HTTPS {#configure-nginx}

Маючи встановлений 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 {#test-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 для застосування змін {#reload-nginx}

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

sudo systemctl reload nginx

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

sudo systemctl status nginx

Ви повинні побачити active (running) у результаті.

7. Крок 5: перевірка роботи перенаправлення {#verify-redirect}

Маючи перезавантажений 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. Поширені проблеми та усунення неполадок {#troubleshooting}

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

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

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

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

15%

Збережіть 15% на всі хостинг-послуги

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

Використовуй код:

Skills
Почати