← Tilbake til dokumentasjon

Host flere nettsteder med NGINX og HTTPS

Installer NGINX på Ubuntu 26.04, sett opp to separate nettsteder, test routingen og aktiver HTTPS med Certbot.

nginxwebserverflere-nettstederhttps

Denne guiden setter opp to statiske nettsteder på én Ubuntu 26.04-VPS. Hvert domene får egen document root, NGINX server block, access log, error log og TLS-sertifikat.

Bytt ut app.example.com og docs.example.net med domener du kontrollerer i alle kommandoer og config-filer.

Før du begynner

  • Du har en Ubuntu 26.04-VPS og en vanlig bruker med sudo-tilgang.
  • Du har fulgt grunnoppsettet for en sikker VPS.
  • Hvert domene har en A-record som peker til VPS-ens IPv4-adresse.
  • Du bruker bare AAAA-record hvis IPv6 er satt opp på VPS-en.
  • TCP-port 80 og 443 er åpne i en eventuell firewall hos leverandøren.

Installer dig hvis kommandoen mangler (sudo apt install dnsutils). Sjekk DNS A-records før du ber om sertifikater:

dig +short A app.example.com
dig +short A docs.example.net

Begge resultatene må inneholde VPS-ens offentlige IPv4-adresse. Hvis du har satt opp AAAA-records, sjekk hvert domene med dig +short AAAA og bekreft at resultatet inneholder VPS-ens offentlige IPv6-adresse.

Installer NGINX og Certbot

sudo apt update
sudo apt install nginx certbot python3-certbot-nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager

Hvis UFW er aktiv, tillater du SSH før du aktiverer den. Deretter åpner du for webtrafikk:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status verbose

Reglene i UFW og en eventuell firewall hos leverandøren må samsvare.

Opprett en mappe for hvert nettsted

sudo install -d -o "$USER" -g www-data -m 0755 /var/www/app.example.com/public
sudo install -d -o "$USER" -g www-data -m 0755 /var/www/docs.example.net/public

Opprett /var/www/app.example.com/public/index.html:

<!doctype html>
<html lang="no">
  <head><meta charset="utf-8"><title>App</title></head>
  <body><h1>App</h1></body>
</html>

Opprett /var/www/docs.example.net/public/index.html:

<!doctype html>
<html lang="no">
  <head><meta charset="utf-8"><title>Dokumentasjon</title></head>
  <body><h1>Dokumentasjon</h1></body>
</html>

Filene trenger bare lesetilgang for www-data-gruppen. Ikke gi skrivetilgang til alle på document root.

Sett opp det første domenet

Opprett /etc/nginx/sites-available/app.example.com:

server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;

    root /var/www/app.example.com/public;
    index index.html;

    access_log /var/log/nginx/app.example.com.access.log;
    error_log /var/log/nginx/app.example.com.error.log;

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

Sett opp det andre domenet

Opprett /etc/nginx/sites-available/docs.example.net:

server {
    listen 80;
    listen [::]:80;
    server_name docs.example.net;

    root /var/www/docs.example.net/public;
    index index.html;

    access_log /var/log/nginx/docs.example.net.access.log;
    error_log /var/log/nginx/docs.example.net.error.log;

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

Aktiver begge nettstedene og fjern standardoppsettet:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/app.example.com
sudo ln -s /etc/nginx/sites-available/docs.example.net /etc/nginx/sites-enabled/docs.example.net
sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

nginx -t må fullføres uten feil før hver reload.

Test routing mellom domenene

Test NGINX lokalt før du blander inn offentlig DNS og TLS:

curl --fail --header 'Host: app.example.com' http://127.0.0.1/
curl --fail --header 'Host: docs.example.net' http://127.0.0.1/

Det første svaret skal inneholde App, og det andre skal inneholde Dokumentasjon. Hvis begge viser samme innhold, sjekker du de aktiverte server block-filene og verdiene for server_name.

Aktiver HTTPS

Be om ett sertifikat per domene når DNS fungerer offentlig:

sudo certbot --nginx -d app.example.com
sudo certbot --nginx -d docs.example.net

Velg redirect fra HTTP til HTTPS når Certbot spør. Test deretter config, begge nettstedene og automatisk fornyelse:

sudo nginx -t
curl --fail --head https://app.example.com/
curl --fail --head https://docs.example.net/
sudo certbot renew --dry-run
systemctl list-timers 'certbot*'

Certbot oppdaterer riktig server block og installerer en timer for fornyelse. Dry run skal fullføres uten feil.

Deploy og drift

Last opp hvert nettsted til sin egen public-mappe. Test alltid config før reload, og bruk loggen for riktig domene når en request feiler:

sudo nginx -t
sudo systemctl reload nginx
sudo tail -n 100 /var/log/nginx/app.example.com.error.log
sudo tail -n 100 /var/log/nginx/docs.example.net.error.log

Hold Ubuntu og NGINX oppdatert, ta backup av innhold og NGINX-config, og monitorer sertifikatfornyelsen. Legg til flere nettsteder ved å gjenta stegene for mappe, server block, routing-test og sertifikat. Ikke bygg videre i config-filen til et annet nettsted.

Se flere nettsteder med NGINX for valg av serverstørrelse når nettstedene deler vert.

Kilder: NGINX request processing, Ubuntu NGINX server blocks og Certbot med NGINX.