15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
01.11.2024

Как да пренасочите HTTP към HTTPS на Linux с Nginx (Пълно ръководство)

Защитата на вашия уебсайт с HTTPS вече не е опционална — това е фундаментално изискване за защита на данните на потребителите, поддържане на доверие и постигане на силни SEO класирания. Търсачки като Google активно наказват незашифрирани HTTP сайтове, докато съвременните браузъри ги отбелязват като “Not Secure.” Пренасочването на целия 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 сайтове и предупреждение “Not Secure” за HTTP сайтове.

Долния ред: управлението на уебсайт без HTTPS в днешната среда е сериозен риск за сигурност и бизнес.

2. Предварителни условия {#prerequisites}

Преди да следвате това ръководство, уверете се, че имате следното:

  • Linux сервър (Ubuntu 20.04/22.04, Debian 11/12 или подобен), работещ с Nginx
  • Регистрирано доменно име, сочещо към IP адреса на вашия сервър
  • Root или sudo достъп до вашия сервър
  • Основна запознаност с командния ред на Linux

Ако търсите надежда среда на сервър за хостване на вашия уебсайт, VPS хостване от 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}

Цикъл на пренасочване

Симптом: Браузърът показва грешка “Too many redirects”.

Причина: Вашият HTTPS блок на сървъра също активира пренасочване обратно към HTTP, създавайки безкраен цикъл.

Поправка: Уверете се, че директивата return 301 съществува само в HTTP (порт 80) блока на сървъра, а не в HTTPS (порт 443) блока.

Предупреждения за смесено съдържание

Симптом

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало