15%

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

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

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

Skills
За начало
30.10.2024

Как да настроите SSL сертификат в Nginx: Пълно ръководство стъпка по стъпка

Защитаването на вашия уебсайт с SSL/TLS сертификат вече не е по избор — то е основно изискване за доверие на потребителите, защита на данните и класиране в търсачките. Google изрично използва HTTPS като сигнал за класиране от 2014 г., а съвременните браузъри активно предупреждават посетителите, когато даден сайт няма криптиране. Ако използвате Nginx като уеб сървър, това ръководство ще ви преведе през всичко необходимо, за да инсталирате, конфигурирате и автоматизирате управлението на SSL сертификати с помощта на Certbot и Let’s Encrypt.

Независимо дали управлявате среда за VPS Хостинг, dedicated сървър или споделен хостинг план, правилно конфигурираният SSL е задължителен за всеки производствен уебсайт.

Какво е SSL сертификат и защо Nginx се нуждае от такъв?

SSL (Secure Sockets Layer) сертификат — по-точно наричан днес TLS (Transport Layer Security) сертификат — установява криптирана връзка между вашия уеб сървър и браузъра на посетителя. Това криптиране гарантира, че чувствителни данни като данни за вход, информация за плащане и лични данни не могат да бъдат прихванати от злонамерени трети страни.

За Nginx конкретно, SSL конфигурацията включва:

  • Файлове на сертификата: Публичната верига от сертификати, издадена от Сертифициращ орган (CA)
  • Частен ключ: Криптографски генериран ключ, съхраняван сигурно на вашия сървър
  • Директиви на сървърния блок: Инструкции за конфигурация на Nginx, които свързват сертификата с вашия домейн

Без SSL вашият сайт се обслужва по HTTP, което означава, че целият трафик се предава в обикновен текст. При правилно конфигуриран SSL вашият сайт използва HTTPS — криптиран, удостоверен и доверен от браузъри и търсачки.

> Полезен съвет: Ако оценявате опции за хостинг, AlexHost предлага SSL Сертификати за домейни от всички видове, включително сертификати за валидиране на домейн (DV), валидиране на организация (OV) и разширено валидиране (EV).

Предварителни изисквания преди да започнете

Преди да се потопите в стъпките за конфигурация, уверете се, че са изпълнени следните условия:

  • Работещ Nginx уеб сървър на Linux-базирана система (препоръчва се Ubuntu 20.04/22.04 или Debian)
  • Root или sudo достъп до вашия сървър
  • Регистрирано доменно име, насочено към IP адреса на вашия сървър чрез DNS A записи — можете да регистрирате такова чрез Регистрация на домейни
  • Отворени портове на защитната стена: TCP портове 80 (HTTP) и 443 (HTTPS) трябва да бъдат достъпни
  • Потребител без root права със sudo привилегии (най-добра практика за сигурност на сървъра)

Можете да проверите дали Nginx работи с:

sudo systemctl status nginx

И да потвърдите, че вашият домейн се разрешава правилно, като използвате:

dig yourdomain.com +short

Стъпка 1: Инсталирайте Certbot на вашия сървър

Certbot е официалният клиент с отворен код за Let’s Encrypt — безплатен, автоматизиран и широко доверен Сертифициращ орган. Той обработва целия процес на издаване на сертификати, включително валидиране на домейна и актуализации на конфигурацията на Nginx.

Актуализирайте индекса на пакетите

Винаги започвайте с опресняване на списъците с пакети, за да сте сигурни, че инсталирате най-новите налични версии:

sudo apt update && sudo apt upgrade -y

Инсталирайте Certbot и плъгина за Nginx

Плъгинът python3-certbot-nginx позволява на Certbot директно да чете и модифицира вашите конфигурационни файлове на Nginx, автоматизирайки голяма част от процеса на настройка:

sudo apt install certbot python3-certbot-nginx -y

Проверете инсталацията

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

certbot --version

Трябва да видите изход, подобен на certbot 2.x.x.

Стъпка 2: Разрешете HTTPS трафик през вашата защитна стена

Ако използвате UFW (Uncomplicated Firewall), трябва изрично да разрешите HTTPS трафика, преди да продължите:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status

Профилът Nginx Full разрешава едновременно HTTP (порт 80) и HTTPS (порт 443). Премахването на самостоятелното HTTP правило гарантира, че след конфигурирането на SSL не оставяте ненужни портове отворени без цел.

Стъпка 3: Получете вашия SSL сертификат от Let’s Encrypt

С инсталиран Certbot и конфигурирана защитна стена вече можете да заявите сертификат. Флагът --nginx казва на Certbot да използва плъгина за Nginx, който автоматично обработва верификацията на ACME предизвикателството и актуализира конфигурацията на вашия сървър.

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

Какво се случва по време на този процес?

  1. Верификация на собствеността на домейна: Certbot временно модифицира вашата Nginx конфигурация, за да обслужва файл с предизвикателство, доказвайки на Let’s Encrypt, че контролирате домейна
  2. Издаване на сертификат: Let’s Encrypt издава подписан сертификат, валиден за 90 дни
  3. Автоматична Nginx конфигурация: Certbot актуализира вашия Nginx сървърен блок, за да използва новите файлове на сертификата

Интерактивни подкани

По време на процеса Certbot ще поиска:

  • Имейл адрес за спешни известия за подновяване и сигурност
  • Съгласие с Условията за ползване
  • Дали да се пренасочи HTTP към HTTPS — винаги избирайте опция 2 (Redirect), за да наложите HTTPS в целия сайт

Вашите сертификати ще бъдат съхранени в:

/etc/letsencrypt/live/yourdomain.com/

Ключовите файлове са:

ФайлПредназначение
fullchain.pemВашият сертификат + междинна верига
privkey.pemВашият частен ключ (пазете го в тайна)
cert.pemСамо вашият домейн сертификат
chain.pemСамо междинните сертификати

Стъпка 4: Ръчно конфигурирайте Nginx за SSL (Разширено)

Докато Certbot автоматизира по-голямата част от конфигурацията, разбирането на ръчната настройка ви дава пълен контрол върху вашата SSL имплементация — от съществено значение за настройка на производителността, укрепване на сигурността и персонализирани внедрявания.

Отворете конфигурацията на вашия Nginx сървърен блок

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

Ако използвате конфигурационния файл по подразбиране:

sudo nano /etc/nginx/sites-available/default

Пълна конфигурация на SSL сървърния блок

Заменете или актуализирайте вашата конфигурация със следния укрепен пример:

# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL Certificate Paths
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # Recommended SSL parameters
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Security Headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";

    # Document root and index
    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

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

Обяснение на ключовите конфигурационни директиви

  • ssl_protocols TLSv1.2 TLSv1.3: Деактивира по-стари, уязвими протоколи (SSLv3, TLS 1.0, TLS 1.1)
  • ssl_ciphers: Задава силен набор от шифри с приоритет на forward secrecy
  • ssl_stapling on: Активира OCSP stapling, намалявайки латентността при SSL ръкостискане
  • Strict-Transport-Security: Инструктира браузърите винаги да използват HTTPS за вашия домейн (HSTS)
  • http2: Активира HTTP/2 за подобрена производителност при HTTPS връзки

Стъпка 5: Тествайте вашата 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 ще посочи файла и номера на реда, където съществува проблемът.

Стъпка 6: Рестартирайте Nginx за прилагане на промените

След като тестът на конфигурацията премине успешно, презаредете или рестартирайте Nginx:

# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx

# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginx

Проверете дали Nginx работи правилно след рестартирането:

sudo systemctl status nginx

Стъпка 7: Настройте автоматично подновяване на SSL сертификата

Сертификатите на Let’s Encrypt изтичат след 90 дни. Този кратък период на валидност е умишлен — той ограничава щетите от компрометирани сертификати и насърчава автоматизацията. Certbot автоматично инсталира systemd таймер (или cron задача) за обработка на подновяванията, но трябва да го проверите и тествате.

Проверете съществуващия таймер за подновяване

sudo systemctl status certbot.timer

Трябва да видите, че таймерът е активен и планиран да се изпълнява два пъти дневно.

Тествайте процеса на подновяване

Симулирайте подновяване, без действително да модифицирате сертификати:

sudo certbot renew --dry-run

Успешният изход ще включва:

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)

Добавете hook след подновяване за презареждане на Nginx

Certbot няма да презареди автоматично Nginx след подновяване на сертификатите, освен ако не конфигурирате deploy hook. Създайте такъв с:

sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Добавете следното съдържание:

#!/bin/bash
systemctl reload nginx

Направете го изпълним:

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Това гарантира, че Nginx зарежда новите файлове на сертификата незабавно след всяко успешно подновяване.

Стъпка 8: Проверете вашата SSL инсталация

След завършване на настройката, проверете вашата SSL конфигурация, като използвате следните методи:

Проверка в браузъра

Навигирайте до https://yourdomain.com в браузъра си. Трябва да видите икона на катинар в адресната лента, указваща защитена връзка.

Онлайн инструменти за тестване на SSL

Използвайте тези безплатни инструменти за одит на качеството на вашата SSL конфигурация:

  • SSL Labs (Qualys): https://www.ssllabs.com/ssltest/ — Предоставя буквена оценка (стремете се към A или A+)
  • Security Headers: https://securityheaders.com/ — Одитира вашите HTTP заглавки за сигурност
  • HSTS Preload: https://hstspreload.org/ — Проверява допустимостта за HSTS предварително зареждане

Верификация от командния ред

# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Отстраняване на често срещани SSL проблеми в Nginx

ПроблемВероятна причинаРешение
ERR_SSL_PROTOCOL_ERRORNginx не слуша на порт 443Проверете директивата listen 443 ssl; и правилата на защитната стена
NET::ERR_CERT_AUTHORITY_INVALIDИзползване на cert.pem вместо fullchain.pemАктуализирайте ssl_certificate да използва fullchain.pem
Сертификатът не се подновяваТаймерът на Certbot е деактивиран или порт 80 е блокиранИзпълнете sudo certbot renew --dry-run и проверете логовете
Предупреждения за смесено съдържаниеHTTP ресурси, заредени на HTTPS страницаАктуализирайте всички вътрешни връзки и URL адреси на активи към HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGHTTP трафик, достигащ HTTPS портаУверете се, че пренасочването от порт 80 към 443 е конфигурирано

Избор на правилната хостинг среда за SSL

Производителността и надеждността на вашата SSL имплементация зависят в голяма степен от вашата хостинг среда. Ето кратък преглед:

  • VPS Хостинг: Пълният root достъп ви дава пълен контрол върху конфигурацията на Nginx, SSL параметрите и управлението на сертификати — идеален за това ръководство
  • Dedicated Сървъри: Максимална производителност и изолация за сайтове с голям трафик, изискващи SSL конфигурации от корпоративен клас
  • Споделен Уеб Хостинг: SSL обикновено се управлява чрез контролен панел; ръчната конфигурация на Certbot може да не е налична
  • VPS с cPanel: Опростява управлението на SSL чрез графичен интерфейс, като същевременно запазва контрол на ниво VPS

За разработчици и системни администратори, които се нуждаят от пълен контрол върху своя SSL стек, VPS или dedicated сървър е препоръчителният избор.

Заключение

Настройването на SSL в Nginx е многостъпков процес, но всяка стъпка служи на критична цел — от криптирането на трафика и верификацията на собствеността на домейна до укрепването на конфигурацията на шифрите и автоматизирането на подновяванията. Следвайки това ръководство, вие сте имплементирали:

✅ Безплатен, доверен SSL сертификат чрез Let’s Encrypt и Certbot

✅ Укрепена Nginx SSL конфигурация с модерни TLS протоколи

✅ Пренасочване от HTTP към HTTPS за целия трафик

✅ OCSP stapling за подобрена производителност при ръкостискане

✅ HSTS и заглавки за сигурност за многопластова защита

✅ Автоматизирано подновяване на сертификати с hooks за презареждане на Nginx

Правилно конфигурираният SSL сертификат не само защитава вашите потребители — той изгражда доверие, подобрява вашите SEO класирания и е основно изискване за всяко професионално уеб присъствие. Ако търсите надеждна инфраструктура за хостване на вашия SSL-защитен Nginx сървър, разгледайте плановете за VPS Хостинг на AlexHost, създадени специално за разработчици и бизнеси, които приемат сигурността сериозно.

15%

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

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

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

Skills
За начало