BLACKBOXCentru de ajutor

Server web cu HTTPS: nginx sau Apache și Let's Encrypt

Instalarea nginx sau Apache, configurarea unui site pentru domeniul dvs. și obținerea unui certificat gratuit Let's Encrypt cu certbot.

generalActualizat 2026-10-09~11 min de citit
Pe această pagină

Acest ghid vă arată cum publicați un site pe serverul BLACKBOX: instalați serverul web nginx sau Apache, configurați site-ul pentru domeniul dvs. și obțineți un certificat HTTPS gratuit de la Let's Encrypt, cu certbot. Lucrați în terminalul serverului, conectat prin SSH ca root (Conectarea la server prin SSH (Windows, macOS, Linux)). Panoul app.blackbox.md nu are o secțiune pentru servere web sau certificate: din el vă trebuie doar adresa IP a serverului, afișată pe cardul serverului în pagina „Serverele mele” (app.blackbox.md/my-servers).

Disponibil pentru: oricine are acces root prin SSH la un server BLACKBOX cu Ubuntu 24.04, 22.04 sau 20.04, Debian 12 sau 11, AlmaLinux 9 ori CentOS Stream 9.

În comenzi, înlocuiți DOMENIU cu domeniul dvs. fără www (de exemplu example.com). Alegeți un singur server web, nginx sau Apache: ambele folosesc porturile 80 și 443 și nu pot rula în același timp.

Dacă aveți un plan „VPS hosting” cu panou de control, nu instalați alt server web peste panou: site-urile și certificatele se configurează din panoul de control. Dacă nu știți ce panou aveți sau cum intrați în el, scrieți suportului. Vedeți Planurile „VPS hosting” cu panou de control.

Înainte de a începe

Condiție Detalii
Domeniul indică serverul înregistrările A pentru DOMENIU și www.DOMENIU au valoarea IP_SERVER și nu există nicio înregistrare AAAA rămasă de la o găzduire veche; vedeți Cum îndreptați domeniul către server
Porturile 80 și 443 sunt deschise pe un server nou, filtrarea din rețea BLACKBOX permite SSH (22), HTTP (80), HTTPS (443) și ping; firewall-ul din sistem (ufw, firewalld) nu este activat
Porturile 80 și 443 sunt libere niciun alt program (alt server web) nu ascultă pe ele

Verificați pe server ce programe ascultă pe porturile 80 și 443. Pe un server nou comanda nu afișează nimic:

ss -tlnp | grep -E ':80|:443'

Dacă ați activat singur firewall-ul din sistem, permiteți HTTP și HTTPS. Pe Ubuntu și Debian (ufw):

ufw allow 80,443/tcp

Pe AlmaLinux și CentOS Stream (firewalld):

firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

Nu activați firewall-ul doar pentru acest ghid. Dacă vreți să-l activați, permiteți întâi SSH și păstrați deschisă o a doua sesiune SSH, ca să nu pierdeți accesul: Firewall: filtrarea din rețea și ufw/firewalld pe server.

Varianta 1: nginx

Ubuntu și Debian

  1. Instalați nginx. Serviciul pornește automat după instalare.

    apt update
    apt install -y nginx
  2. Creați directorul site-ului și o pagină de test:

    mkdir -p /var/www/DOMENIU
    echo "DOMENIU OK" > /var/www/DOMENIU/index.html
  3. Creați fișierul de configurare al site-ului:

    nano /etc/nginx/sites-available/DOMENIU
  4. Lipiți conținutul de mai jos, salvați cu Ctrl+O și Enter, apoi ieșiți cu Ctrl+X:

    server {
        listen 80;
        server_name DOMENIU www.DOMENIU;
        root /var/www/DOMENIU;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
  5. Activați site-ul:

    ln -s /etc/nginx/sites-available/DOMENIU /etc/nginx/sites-enabled/
  6. Verificați configurația și reîncărcați nginx. nginx -t trebuie să afișeze „syntax is ok” și „test is successful”; dacă afișează o eroare, corectați fișierul înainte de reîncărcare.

    nginx -t
    systemctl reload nginx

AlmaLinux și CentOS Stream

  1. Instalați și porniți nginx:

    dnf install -y nginx
    systemctl enable --now nginx
  2. Creați directorul site-ului și pagina de test, apoi aplicați eticheta SELinux pentru conținut web: fișierele fără ea primesc „403 Forbidden”. Rulați din nou restorecon și după ce mutați (mv) în director fișiere din alt loc.

    mkdir -p /var/www/DOMENIU
    echo "DOMENIU OK" > /var/www/DOMENIU/index.html
    restorecon -Rv /var/www
  3. Creați fișierul de configurare (dacă nano lipsește, prima comandă îl instalează):

    dnf install -y nano
    nano /etc/nginx/conf.d/DOMENIU.conf
  4. Lipiți același bloc server { … } ca la Ubuntu și Debian, salvați și ieșiți.

  5. Verificați configurația și reîncărcați nginx:

    nginx -t
    systemctl reload nginx

Varianta 2: Apache

Ubuntu și Debian

  1. Instalați Apache. Serviciul pornește automat după instalare.

    apt update
    apt install -y apache2
  2. Creați directorul site-ului și pagina de test, cu comenzile de la pasul 2 din varianta nginx.

  3. Creați fișierul de configurare al site-ului:

    nano /etc/apache2/sites-available/DOMENIU.conf
  4. Lipiți conținutul de mai jos, salvați și ieșiți:

    <VirtualHost *:80>
        ServerName DOMENIU
        ServerAlias www.DOMENIU
        DocumentRoot /var/www/DOMENIU
        ErrorLog ${APACHE_LOG_DIR}/DOMENIU-error.log
        CustomLog ${APACHE_LOG_DIR}/DOMENIU-access.log combined
    </VirtualHost>
  5. Activați site-ul, verificați configurația și reîncărcați Apache. apachectl configtest trebuie să afișeze „Syntax OK”.

    a2ensite DOMENIU.conf
    apachectl configtest
    systemctl reload apache2

AlmaLinux și CentOS Stream

  1. Instalați Apache (httpd) și modulul HTTPS (mod_ssl, necesar pentru certbot), apoi porniți serviciul:

    dnf install -y httpd mod_ssl
    systemctl enable --now httpd
  2. Creați directorul site-ului și pagina de test, cu comenzile de la pasul 2 din varianta nginx, inclusiv restorecon.

  3. Creați fișierul de configurare al site-ului (dacă nano lipsește, instalați-l ca la pasul 3 din varianta nginx):

    nano /etc/httpd/conf.d/DOMENIU.conf
  4. Lipiți blocul <VirtualHost *:80> de la Ubuntu și Debian, cu alte căi pentru jurnale: /var/log/httpd/DOMENIU-error.log și /var/log/httpd/DOMENIU-access.log. Salvați și ieșiți.

  5. Verificați configurația și reîncărcați Apache:

    apachectl configtest
    systemctl reload httpd

Verificarea site-ului prin HTTP

De pe calculatorul dvs. deschideți http://DOMENIU în browser: trebuie să apară textul „DOMENIU OK”. Sau rulați comanda de mai jos (pe Windows, în PowerShell, scrieți curl.exe în loc de curl); răspunsul trebuie să înceapă cu HTTP/1.1 200 OK. Dacă site-ul nu răspunde, rezolvați întâi problema: certbot are nevoie de un site accesibil prin HTTP.

curl -I http://DOMENIU

Certificatul Let's Encrypt cu certbot

Instalarea certbot

Ubuntu și Debian. Pentru Apache, instalați python3-certbot-apache în locul python3-certbot-nginx.

apt install -y certbot python3-certbot-nginx

AlmaLinux și CentOS Stream. Certbot vine din depozitul EPEL. Ultima comandă pornește timerul de reînnoire, care aici nu se activează singur. Pentru Apache, instalați python3-certbot-apache.

dnf install -y epel-release
dnf install -y certbot python3-certbot-nginx
systemctl enable --now certbot-renew.timer

Pe Ubuntu și Debian puteți folosi și varianta snap, recomandată de dezvoltatorii certbot: are de obicei o versiune mai nouă și include pluginurile nginx și Apache. Folosiți fie apt, fie snap, nu pe amândouă. Dacă ați instalat deja certbot cu apt, eliminați-l:

apt remove -y certbot

Pe Debian, instalați întâi snapd:

apt install -y snapd
snap install core

Apoi instalați certbot din snap:

snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Obținerea certificatului

  1. Rulați certbot cu pluginul serverului dvs. web. Pentru nginx:

    certbot --nginx -d DOMENIU -d www.DOMENIU

    Pentru Apache:

    certbot --apache -d DOMENIU -d www.DOMENIU
  2. La prima rulare, certbot vă cere o adresă de email și acceptarea condițiilor Let's Encrypt: scrieți adresa și răspundeți Y. La întrebarea despre buletinul informativ EFF puteți răspunde N.

  3. Dacă certbot întreabă dacă să redirecționeze HTTP spre HTTPS (versiunile mai vechi), alegeți „2: Redirect”. Versiunile noi adaugă redirecționarea fără să întrebe.

  4. La final apare un mesaj care începe cu „Congratulations!”. Certificatul și cheia sunt în /etc/letsencrypt/live/DOMENIU/, iar certbot a adăugat în configurația site-ului blocul HTTPS (portul 443) și redirecționarea de la HTTP.

  5. Deschideți https://DOMENIU în browser și verificați lacătul. Comanda de mai jos afișează certificatele, domeniile și data expirării („Expiry Date”):

    certbot certificates

Reînnoirea automată

Certificatul este valabil 90 de zile. Timerul certbot verifică certificatele de două ori pe zi și le reînnoiește singur înainte de expirare. Cu --nginx și --apache, certbot reîncarcă și serverul web după reînnoire.

Cum ați instalat certbot Timerul de reînnoire Pornit automat
apt (Ubuntu, Debian) certbot.timer da
snap snap.certbot.renew.timer da
EPEL (AlmaLinux, CentOS Stream) certbot-renew.timer nu: îl porniți cu systemctl enable --now certbot-renew.timer

Verificați timerul și simulați o reînnoire. --dry-run nu emite un certificat nou și se încheie cu „Congratulations, all simulated renewals succeeded” (în versiunile vechi, „Congratulations, all renewals succeeded”).

systemctl list-timers | grep -i certbot
certbot renew --dry-run

Notă Let's Encrypt nu mai trimite emailuri înainte de expirarea certificatelor și a anunțat că va scurta treptat durata lor de valabilitate. Nu programați reînnoiri manuale după calendar: lăsați timerul certbot să lucreze și verificați din când în când data expirării cu certbot certificates.

Certificat wildcard (*.DOMENIU) cu validare prin DNS

Un certificat wildcard acoperă toate subdomeniile de un nivel (www.DOMENIU, api.DOMENIU etc.) și se obține doar cu validare prin DNS: certbot creează temporar înregistrarea TXT _acme-challenge.DOMENIU. Ca reînnoirea să rămână automată, certbot are nevoie de un plugin pentru furnizorul dvs. de DNS. Exemplul este pentru Cloudflare; pentru alți furnizori vedeți lista pluginurilor DNS din documentația certbot. Fără plugin (--manual), certificatul nu se mai reînnoiește automat. Dacă aveți nevoie de wildcard, urmați pașii de mai jos în locul celor de la „Obținerea certificatului”.

  1. În contul Cloudflare, creați un token doar pentru certbot: „My Profile” → „API Tokens” → „Create Token” → șablonul „Edit zone DNS”. La „Zone Resources” alegeți doar zona DOMENIU, creați tokenul și copiați-l. Nu refolosiți tokenul conectat în pagina „DNS” a panoului: pe unul separat îl puteți revoca fără să afectați panoul.

  2. Instalați pluginul Cloudflare. Ubuntu și Debian:

    apt install -y python3-certbot-dns-cloudflare

    AlmaLinux și CentOS Stream:

    dnf install -y python3-certbot-dns-cloudflare

    Dacă folosiți certbot din snap:

    snap set certbot trust-plugin-with-root=ok
    snap install certbot-dns-cloudflare

    Pe Ubuntu 20.04, pluginul din apt este prea vechi și nu acceptă tokenuri API: folosiți certbot și pluginul din snap.

  3. Salvați tokenul într-un fișier:

    mkdir -p /root/.secrets
    nano /root/.secrets/cloudflare.ini

    Conținutul fișierului, cu tokenul dvs. în locul TOKEN_CLOUDFLARE:

    dns_cloudflare_api_token = TOKEN_CLOUDFLARE
  4. Lăsați fișierul accesibil doar pentru root:

    chmod 600 /root/.secrets/cloudflare.ini
  5. Obțineți certificatul. --deploy-hook reîncarcă serverul web după fiecare reînnoire; pentru Apache scrieți systemctl reload apache2 (Ubuntu, Debian) sau systemctl reload httpd (AlmaLinux, CentOS Stream).

    certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d DOMENIU -d "*.DOMENIU" --deploy-hook "systemctl reload nginx"
  6. certonly nu modifică configurația serverului web: adăugați singur în fișierul site-ului un bloc pentru HTTPS. Pentru nginx, adăugați blocul de mai jos, apoi rulați nginx -t și reîncărcați nginx. Pentru un subdomeniu, copiați blocul și schimbați server_name și root; liniile certificatului rămân aceleași.

    server {
        listen 443 ssl;
        server_name DOMENIU www.DOMENIU;
        root /var/www/DOMENIU;
        ssl_certificate     /etc/letsencrypt/live/DOMENIU/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/DOMENIU/privkey.pem;
    }

    Ca să redirecționați HTTP spre HTTPS, în blocul cu listen 80 înlocuiți liniile root, index și blocul location cu return 301 https://$host$request_uri;.

  7. Pentru Apache, adăugați în fișierul site-ului blocul de mai jos. Ca să redirecționați HTTP spre HTTPS, adăugați în blocul <VirtualHost *:80> linia Redirect permanent / https://DOMENIU/.

    <VirtualHost *:443>
        ServerName DOMENIU
        ServerAlias www.DOMENIU
        DocumentRoot /var/www/DOMENIU
        SSLEngine on
        SSLCertificateFile    /etc/letsencrypt/live/DOMENIU/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/DOMENIU/privkey.pem
    </VirtualHost>

    Pe Ubuntu și Debian, activați modulul SSL, verificați configurația și reporniți Apache:

    a2enmod ssl
    apachectl configtest
    systemctl restart apache2

    Pe AlmaLinux și CentOS Stream, mod_ssl este deja instalat (pasul 1 din varianta Apache):

    apachectl configtest
    systemctl reload httpd

Probleme frecvente

Mesaj sau simptom Cauza Ce faceți
„DNS problem: NXDOMAIN looking up A for DOMENIU” înregistrarea A lipsește sau nu s-a propagat creați înregistrarea, așteptați și verificați cu dig +short DOMENIU A
„Timeout during connect (likely firewall problem)” portul 80 este blocat sau domeniul indică altă adresă permiteți 80 și 443 în ufw/firewalld; verificați înregistrările A și AAAA; dacă tot nu merge, scrieți suportului
„Connection refused” serverul web nu rulează systemctl status nginx (sau apache2, httpd) și ss -tlnp
„Invalid response from http://DOMENIU/.well-known/acme-challenge/…” cu 404 cererea ajunge la alt server: o înregistrare A sau AAAA veche ori proxy-ul Cloudflare corectați înregistrările DNS; opriți temporar proxy-ul
„Could not automatically find a matching server block for DOMENIU” lipsește server_name cu acest domeniu adăugați server_name, rulați nginx -t, reîncărcați și rulați din nou certbot
„bind() to 0.0.0.0:80 failed (98: Address already in use)” alt server web ocupă portul 80 opriți-l sau eliminați-l; păstrați un singur server web
„too many failed authorizations” sau „too many certificates” limitele Let's Encrypt așteptați (vedeți mai jos); testați cu --dry-run
„403 Forbidden” pe AlmaLinux sau CentOS Stream eticheta SELinux a fișierelor restorecon -Rv /var/www
„502 Bad Gateway” pe AlmaLinux sau CentOS Stream, cu „(13: Permission denied)” în /var/log/nginx/error.log SELinux nu lasă nginx să se conecteze la aplicația din spate setsebool -P httpd_can_network_connect 1; vedeți Aplicații Node.js, Python și alte servicii: nginx ca reverse proxy
ERR_TOO_MANY_REDIRECTS prin Cloudflare modul SSL „Flexible” în Cloudflare alegeți modul „Full (strict)”

Jurnalul complet al certbot este în /var/log/letsencrypt/letsencrypt.log.

După ce corectați cauza, testați emiterea pe serverul de test Let's Encrypt, fără să obțineți un certificat real. --dry-run funcționează doar cu certonly și renew; pentru Apache scrieți --apache.

certbot certonly --nginx --dry-run -d DOMENIU -d www.DOMENIU

Atenție Let's Encrypt limitează încercările: după 5 validări eșuate pentru același nume într-o oră, noile încercări sunt refuzate temporar, iar pentru exact același set de nume se pot emite cel mult 5 certificate în 7 zile. Nu rulați certbot iar și iar: testați cu --dry-run, care nu consumă aceste limite. Detalii: limitele Let's Encrypt.

Domeniul trece prin proxy-ul Cloudflare

  1. Pentru prima emitere, lăsați înregistrările DOMENIU și www pe „DNS only” (în pagina „DNS” a panoului, caseta „Proxy” nebifată) sau folosiți validarea prin DNS de mai sus.
  2. După ce site-ul funcționează cu HTTPS direct pe server, activați proxy-ul.
  3. În contul Cloudflare, la „SSL/TLS”, alegeți modul de criptare „Full (strict)”. Modul „Flexible” provoacă bucle de redirecționare, pentru că serverul trimite HTTP spre HTTPS.

Detalii despre proxy: Cum îndreptați domeniul către server.

Pașii următori

Întrebări frecvente

Pot găzdui mai multe site-uri pe același server? Da. Pentru fiecare domeniu creați un director și un fișier de configurare separat (un bloc server la nginx, un VirtualHost la Apache), apoi rulați certbot cu numele acelui domeniu.

Cum adaug un subdomeniu la un certificat existent? Creați înregistrarea A pentru subdomeniu, adăugați-l în server_name (sau ServerAlias), reîncărcați serverul web și rulați certbot cu toate numele, cele vechi și cel nou. Pentru Apache, scrieți --apache în loc de --nginx:

certbot --nginx --expand -d DOMENIU -d www.DOMENIU -d app.DOMENIU

Ce se întâmplă dacă reînnoirea eșuează? Certificatul actual rămâne valabil până la data expirării, iar timerul reîncearcă de două ori pe zi. Cauza este în /var/log/letsencrypt/letsencrypt.log; după ce o corectați, confirmați cu certbot renew --dry-run.

Poate asistentul AI să facă acești pași în locul meu? Da, dacă tokenul lui are permisiunile „Citește lista și statusul serverelor mele” (servers:read) și „Rulează orice comandă ca root pe serverele mele” (servers:exec). Domeniul trebuie să indice deja serverul. Vedeți Exemple de sarcini pentru asistentul AI și permisiunile necesare.

Am urmat pașii, dar site-ul tot nu se deschide. Parcurgeți lista de verificări din Site-ul nu se deschide. Dacă problema rămâne, scrieți-ne: Cum contactați suportul BLACKBOX.

N-ați găsit răspunsul?Scrieți-ne și echipa de suport vă răspunde. support@blackbox.md
Deschideți un tichet