Cum să configurezi Virtual Hosts în Nginx pe Ubuntu
Configurarea gazdelor virtuale în Nginx este una dintre cele mai puternice tehnici pentru găzduirea mai multor site-uri web pe un singur server, fiecare cu propriul domeniu, director rădăcină și configurație independentă. Nginx gestionează acest lucru prin blocuri server — unități de configurație flexibile și ușoare care definesc modul în care serverul web răspunde la cererile pentru fiecare domeniu.
Indiferent dacă gestionezi un portofoliu personal, rulezi site-uri pentru clienți sau scalezi o aplicație multi-tenant, acest ghid oferă o prezentare completă, gata pentru producție, pentru configurarea gazdelor virtuale Nginx pe Ubuntu. Vom acoperi structura directoarelor, configurația blocurilor server, activarea site-urilor, configurarea SSL/HTTPS și depanarea — totul ce ai nevoie pentru a trece de la zero la un server Nginx multi-site complet funcțional.
> Cauți un server Ubuntu fiabil pentru a urma? Planurile VPS Hosting ale AlexHost îți oferă acces root complet, stocare SSD și implementare instantanee — perfecte pentru exact acest caz de utilizare.
Cuprins
- Cerințe preliminare
- Configurează directoarele pentru fiecare site web
- Creează conținut HTML exemplu
- Creează fișiere de configurare a gazdelor virtuale
- Activează gazdele virtuale
- Testează configurația Nginx
- Repornește Nginx pentru a aplica modificările
- Accesează site-urile tale
- Activează HTTPS cu Let’s Encrypt (Recomandat)
- Depanarea problemelor comune
- Concluzie
Cerințe preliminare
Înainte de a începe, asigură-te că sunt îndeplinite următoarele condiții:
Nginx instalat pe serverul tău
Dacă Nginx nu este încă instalat, rulează următoarele comenzi pe serverul tău Ubuntu:
sudo apt update
sudo apt install nginxVerifică instalarea și verifică că serviciul rulează:
sudo systemctl status nginxAr trebui să vezi active (running) în rezultat. Dacă nu, pornește-l manual:
sudo systemctl start nginx
sudo systemctl enable nginxDomenii care indică serverul tău
Fiecare gazdă virtuală necesită un domeniu care se rezolvă la adresa IP publică a serverului tău. Va trebui să creezi înregistrări A în setările DNS care indică IP-ul serverului.
> Ai nevoie de un domeniu? Înregistrează-ți al tău prin Înregistrarea domeniilor AlexHost și gestionează înregistrările DNS direct din panoul de control.
Pentru testare locală, poți ocoli DNS-ul complet editând fișierul /etc/hosts (acoperit în Pasul 7).
Permisiuni necesare
Vei avea nevoie de privilegii sudo pe serverul tău Ubuntu pentru a crea directoare, edita fișiere de configurare și gestiona serviciul Nginx.
Pasul 1: Configurează directoarele pentru fiecare site web
Fiecare site web găzduit pe serverul tău ar trebui să aibă propriul director izolat pentru a stoca fișierele web. Această separare ține proiectele tale organizate și previne conflictele de configurare.
În acest ghid, vom configura două domenii exemplu: example1.com și example2.com. Înlocuiește acestea cu numele domeniilor tale reale pe tot parcursul.
Creează directoarele rădăcină web
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlSteagul -p creează toate directoarele intermediare după cum este necesar.
Atribuie proprietatea corectă
Acordă proprietatea acestor directoare utilizatorului www-data, utilizatorul de sistem pe care rulează Nginx:
sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/htmlAceasta asigură că Nginx are permisiunile de citire necesare pentru a servi fișiere din aceste directoare.
Setează permisiunile directoarelor
sudo chmod -R 755 /var/wwwPermisiunea 755 înseamnă că proprietarul are acces complet de citire/scriere/execuție, în timp ce grupurile și alți utilizatori au acces de citire și execuție — potrivit pentru conținut web servit public.
Pasul 2: Creează conținut HTML exemplu
Pentru a verifica că fiecare gazdă virtuală funcționează corect, creează un fișier simplu index.html pentru fiecare site.
Pentru example1.com
echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.htmlPentru example2.com
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlAceste pagini placeholder vor confirma că Nginx direcționează cererile la directorul document corect pentru fiecare domeniu.
Pasul 3: Creează fișiere de configurare a gazdelor virtuale
Nginx stochează fișierele de configurare a site-urilor în /etc/nginx/sites-available/. Fiecare fișier definește un bloc server — echivalentul Nginx al unei gazde virtuale Apache. Site-urile activate sunt apoi symlinked în /etc/nginx/sites-enabled/.
Configurație pentru example1.com
Creează un nou fișier de configurare:
sudo nano /etc/nginx/sites-available/example1.comAdaugă următorul bloc server:
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html index.htm;
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Salvează și închide fișierul (Ctrl+X, apoi Y, apoi Enter).
Configurație pentru example2.com
Creează un al doilea fișier de configurare:
sudo nano /etc/nginx/sites-available/example2.comAdaugă următorul bloc server:
server {
listen 80;
listen [::]:80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html index.htm;
access_log /var/log/nginx/example2.com.access.log;
error_log /var/log/nginx/example2.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Directive cheie explicate
| Directivă | Scop |
|---|---|
listen 80 | Ascultă conexiunile HTTP de intrare pe portul 80 |
listen [::]:80 | Activează suportul IPv6 pe portul 80 |
server_name | Definește care nume de domenii gestionează acest bloc |
root | Setează rădăcina documentului — unde sunt stocate fișierele site-ului web |
index | Specifică fișierul implicit de servit când este solicitată o directoare |
try_files | Încearcă să servească fișierul solicitat; returnează 404 dacă nu este găsit |
access_log / error_log | Fișiere jurnal separate per site pentru depanare mai ușoară |
Pasul 4: Activează gazdele virtuale
Nginx activează site-urile creând legături simbolice din sites-available la sites-enabled. Acest design îți permite să pregătești configurații fără a le activa imediat.
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/Dezactivează site-ul implicit (Opțional dar recomandat)
Dacă dorești să previi pagina placeholder implicită a Nginx să interfereze, dezactivează-o:
sudo rm /etc/nginx/sites-enabled/defaultPoți oricând să o reactivezi mai târziu recreând symlink-ul.
Pasul 5: Testează configurația Nginx
Înainte de a reporni Nginx, validează întotdeauna fișierele de configurare pentru erori de sintaxă. Un fișier configurat incorect poate duce la căderea tuturor site-urilor de pe server.
sudo nginx -tUn test reușit returnează:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulDacă vezi erori, Nginx va indica fișierul și numărul liniei unde apare problema. Revizuiește fișierul de configurare relevant și corectează orice greșeli de scriere sau puncte și virgule lipsă înainte de a continua.
Pasul 6: Repornește Nginx pentru a aplica modificările
Odată ce testul de configurare trece, reîncarcă sau repornește Nginx pentru a aplica modificările:
sudo systemctl restart nginxAlternativ, folosește reload pentru o repornire ușoară care nu întrerupe conexiunile active:
sudo systemctl reload nginxPasul 7: Accesează site-urile tale
Dacă DNS este deja configurat
Dacă numele domeniilor tale indică deja IP-ul serverului tău prin înregistrări DNS A, pur și simplu deschide un browser și navighează la:
http://example1.comhttp://example2.com
Ar trebui să vezi mesajele respective de „Bun venit” pe care le-ai creat în Pasul 2.
Pentru testare locală (fără DNS)
Dacă testezi local sau DNS nu s-a propagat încă, poți simula rezoluția domeniului editând fișierul /etc/hosts al mașinii tale locale (pe Linux/macOS) sau C:WindowsSystem32driversetchosts (pe Windows).
Deschide fișierul cu privilegii ridicate:
sudo nano /etc/hostsAdaugă următoarele linii, înlocuind YOUR_SERVER_IP cu IP-ul real al serverului tău:
YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.comSalvează fișierul și testează în browser. Nu uita să elimini aceste intrări odată ce înregistrările DNS reale sunt active.
Pasul 8: Activează HTTPS cu Let’s Encrypt (Recomandat)
Rularea site-urilor web pe HTTP simplu nu mai este acceptabilă pentru mediile de producție. HTTPS criptează traficul între serverul tău și vizitatori, îmbunătățește clasamentele SEO și este necesar pentru caracteristicile moderne ale browserului. Let’s Encrypt oferă certificate SSL/TLS gratuite și reînnoibile automat.
> Preferi o soluție SSL premium? AlexHost oferă Certificate SSL de încredere pentru afacerile care au nevoie de validare extinsă sau acoperire wildcard.
Instalează Certbot
sudo apt install certbot python3-certbot-nginxObține și instalează certificate SSL
Rulează Certbot pentru fiecare domeniu. Pluginul --nginx modifică automat configurația Nginx pentru a activa HTTPS:
sudo certbot --nginx -d example1.com -d www.example1.comsudo certbot --nginx -d example2.com -d www.example2.comUrmează indicațiile interactive. Certbot va:
- Verifica proprietatea domeniului prin provocare HTTP
- Obține un certificat semnat de la Let’s Encrypt
- Actualizează automat blocul server Nginx pentru a asculta pe portul 443
- Configurează redirecționarea HTTP-la-HTTPS
Verifică reînnouirea automată
Certificatele Let’s Encrypt expiră la fiecare 90 de zile. Certbot instalează un cronometru systemd pentru a gestiona reînnouirile automat. Testează-l cu:
sudo certbot renew --dry-runDacă rularea de probă se completează fără erori, certificatele tale se vor reînnoi automat fără nicio intervenție manuală.
Cum va arăta blocul server actualizat
După ce Certbot rulează, configurația ta va fi actualizată automat la ceva de genul:
server {
listen 443 ssl;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}Depanarea problemelor comune
Chiar și cu configurare atentă, pot apărea probleme. Iată cele mai comune probleme și cum să le rezolvi:
502 Bad Gateway
Aceasta înseamnă de obicei că Nginx nu poate comunica cu un serviciu backend (de exemplu, PHP-FPM sau o aplicație Node.js). Verifică că serviciul upstream rulează și că socketul/portul din configurația ta este corect.
403 Forbidden
De obicei o problemă de permisiuni. Verifică că www-data deține rădăcina web și că permisiunile fișierelor sunt setate corect:
sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com404 Not Found
Verifică că directiva root din blocul server indică directorul corect și că index.html există la acea cale.
Site-ul greșit se încarcă
Dacă vizitarea example1.com încarcă conținutul example2.com, verifică că:
- Fiecare directivă
server_nameeste unică și corectă - Symlink-urile din
sites-enabledsunt valide:ls -la /etc/nginx/sites-enabled/ - Site-ul implicit este dezactivat dacă intră în conflict
Nginx nu pornește după schimbarea configurației
Rulează întotdeauna sudo nginx -t înainte de a reporni. Revizuiește rezultatul erorii cu atenție — va indica exact fișierul și linia care cauzează problema.
Verificarea jurnalelor
Jurnalele per-site (configurate în Pasul 3) sunt cea mai bună resursă de depanare:
sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.logConsiderații avansate
Găzduirea aplicațiilor PHP
Dacă site-urile tale rulează PHP (de exemplu, WordPress, Laravel), va trebui să instalezi PHP-FPM și să adaugi o directivă fastcgi_pass la blocul server:
###PPT_NOTR_28
