Як перенаправити 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 буде:
- Перевіряти право власності на домен через виклик ACME
- Отримувати підписаний сертифікат від Let’s Encrypt
- Автоматично змінювати конфігурацію Nginx для включення HTTPS на порту 443
- За бажанням налаштовувати автоматичне перенаправлення HTTP на HTTPS (ви можете пропустити цей крок у Certbot і налаштувати його вручну, як показано нижче, для повного контролю)
Включення автоматичного поновлення сертифіката
Сертифікати Let’s Encrypt закінчуються кожні 90 днів. Certbot встановлює таймер systemd або завдання cron для автоматичного обробки поновлень. Переконайтеся, що він активний:
sudo systemctl status certbot.timerВи також можете виконати тестове поновлення в режимі dry-run:
sudo certbot renew --dry-run4. Крок 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 80 | Nginx прослуховує вхідні з’єднання на 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: Тест у браузері
- Відкрийте веб-браузер.
- Перейдіть на
http://example.com(використовуючи HTTP, а не HTTPS). - Спостерігайте, як браузер автоматично перенаправляє вас на
https://example.com. - Підтвердьте, що в адресному рядку з’являється значок замка, що вказує на дійсне 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 reload9. Висновок
Перенаправлення HTTP на HTTPS на вашому Linux сервері за допомогою Nginx — це простий, але критично важливий завдання конфігурації. Реалізуючи постійне перенаправлення 301, ви гарантуєте, що кожен відвідувач — незалежно від того, як він отримує доступ до вашого сайту — автоматично отримує зашифровану, безпечну версію. Це захищає конфіденційні дані користувачів, будує довіру відвідувачів, задовольняє вимоги безпеки сучасних браузерів і забезпечує вимірюваний SEO-бенефіт.
Для повторення ключових кроків, розглянутих у цьому посібнику:
- Встановіть Certbot і отримайте безплатний SSL сертифікат від Let's Encrypt.
- Налаштуйте блок HTTP сервера Nginx з
return 301перенаправленням на HTTPS. - Протестуйте вашу конфігурацію за допомогою
sudo nginx -tперед застосуванням змін. - Перезавантажте Nginx за допомогою
sudo systemctl reload nginx. - Перевірте перенаправлення за допомогою вашого браузера,
curlабо онлайн-перевірки перенаправлення. - Моніторьте поновлення сертифіката, щоб переконатися, що ваш SSL сертифікат ніколи не закінчиться.
Для найкращих результатів запустіть ваш веб-сервер Nginx на високопродуктивній та надійній платформі хостингу. AlexHost пропонує VPS Hosting з повним root доступом, SSD NVMe сховищем та гнучкими дистрибутивами Linux — ідеально для хостингу веб-сайтів на базі Nginx. Якщо вам потрібне попередньо налаштоване середовище панелі керування, дослідіть VPS з cPanel або переглядайте всі доступні VPS Control Panels, щоб знайти правильний інтерфейс управління для вашого робочого процесу. Для високотрафікових або ресурсоємних додатків Dedicated Servers забезпечують максимальну продуктивність та ізоляцію, яких вимагає ваша інфраструктура.
Регулярно перевіряйте дійсність вашого SSL сертифіката, тримайте Nginx в актуальному стані та періодично переглядайте конфігурацію безпеки вашого сервера, щоб підтримувати надійну та надійну веб-присутність.
на всіх хостингових послугах