Hoe NGINX Subdomeinen of Meerdere Domeinen te Bedienen

Heeft u een server met een enkel openbaar IP-adres, maar moet u meerdere domeinen of subdomeinen hosten? Wat zou u doen? Deze situatie kan verwarrend zijn als u een beginner bent. Maar maak je geen zorgen, deze tutorial heeft alles wat je nodig hebt, zodat je een NGINX subdomein en meerdere domeinen kunt hosten.

In deze tutorial leer je hoe je effectief NGINX subdomeinen of meerdere domeinen kunt hosten op één server met een enkel IP-adres!

Als je er klaar voor bent, laten we aan de slag gaan!

Vereisten

Deze tutorial bevat hands-on demonstraties maar vereist niet veel voorafgaande kennis en gaat ervan uit dat je een Ubuntu Server LTS met SSH ingeschakeld en NGINX geïnstalleerd hebt. De demonstraties in deze tutorial zijn gebaseerd op Ubuntu Server LTS 20.04.1.

DNS-records instellen

Voordat je NGINX subdomeinen of meerdere domeinen kunt hosten, moet je een A-record toevoegen in een DNS beheerpaneel. Het A-record koppelt en verwijst alle domeinen en subdomeinen naar een enkel IP-adres, zodat webbrowsers je website kunnen vinden.

1. Start je favoriete webbrowser en log in op je DNS-beheerpaneel.

2. Klik op Record toevoegen om A-records toe te voegen. Je browser leidt je naar een pagina waar je DNS-instellingen voor je domein en subdomeinen configureert.

Adding an A Record

Configureer nu de DNS-instellingen als volgt:

Selecteer A record in het veld Type.

Vul @ in bij het veld Host en het IP-adres van je server in bij het veld Waarde.

Selecteer de gewenste waarde in het veld TTL, klik vervolgens op de knop Bevestigen om de instellingen op te slaan.

Herhaal hetzelfde proces voor andere subdomeinen.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

De uiteindelijke pagina met DNS-instellingen ziet eruit zoals hieronder.

Viewing DNS Settings Page

Je DNS-recordbeheerpaneel kan verschillen in functionaliteit en ontwerp, maar dezelfde principes zijn van toepassing op allemaal.

Webmappen instellen voor NGINX-domein en subdomein

Nu je A-records hebt toegevoegd voor je domein en subdomeinen, is het tijd om hun webmappen in te stellen. NGINX wordt geleverd met een standaard virtueel hostbestand en is geconfigureerd om een webmap te bedienen die zich bevindt op /usr/share/nginx/html.

Maak een aparte webmap aan voor elk domein binnen de standaard document root van NGINX (/var/www/html).

1. Open eerst je terminal en voer de onderstaande commando’s uit om webmappen te maken voor alle domeinen en subdomeinen. Hiermee worden bestanden voor elke website gescheiden, georganiseerd en geïsoleerd.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. Voer vervolgens het chown-commando uit om recursief (-R) de eigenaar van elke map die je in stap één hebt gemaakt te wijzigen naar de gebruiker en groep www-data. Je wijzigt de eigenaar van elke map naar de gebruiker en groep www-data, aangezien NGINX draait als een gebruiker www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Maak een bestand met de naam index.html in je favoriete code-editor en kopieer/ plak vervolgens de onderstaande code naar het bestand index.html. Sla het bestand op in de primaire webmap van je domeinen (/var/www/html/awstutorial.net).

De HTML-code hieronder toont een bericht dat zegt “Gefeliciteerd! De awstutorial.net website werkt!” wanneer het bestand index.html wordt geopend in een webbrowser.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Maak ten slotte hetzelfde index.html in de mappen /var/www/html/web1.awstutorial.net en /var/www/html/web2.awstutorial.net. Vervang echter awstutorial.net door web1.awstutorial.net, en web2.awstutorial.net in de code van elk index.html overeenkomstig.

Instellen van Virtuele Host voor NGINX Domein en Subdomeinen

Je hebt al een index.html pagina voor je domein en subdomeinen om te serveren via een NGINX-webserver. De volgende stap is het maken van een NGINX virtueel host-configuratiebestand voor elk domein om de HTML-pagina’s te serveren.

1. Maak een NGINX virtueel host configuratiebestand met de naam awstutorial.net aan in uw favoriete code-editor en kopieer/ plak vervolgens de onderstaande code naar dat bestand. Sla het bestand op in de map /etc/nginx/sites-available/.

De onderstaande code beheert het gedrag van uw server, zoals de servernaam en het index (home) pagina wanneer een gebruiker probeert toegang te krijgen tot uw domein.

server {
        # Bindt de TCP-poort 80.
        listen 80; 

				# Root-directory gebruikt om naar een bestand te zoeken
        root /var/www/html/awstutorial.net;
				# Definieert het bestand dat wordt gebruikt als indexpagina
        index index.html index.htm;
				# Definieert de domein- of subdomeinnaam. 
        # Als er geen server_name is gedefinieerd in een serverblok, dan 
				# gebruikt Nginx de 'lege' naam
        server_name awstutorial.net;

        location / {
            # Geeft een 404-fout voor gevallen waarin de server 
						# verzoeken ontvangt voor ontraceerbare bestanden en mappen.
            try_files $uri $uri/ =404;
        }
    }

2. Voer vervolgens de volgende nginx-opdracht uit om de NGINX-configuratiebestand op syntaxisfouten te controleren (-t).

sudo nginx -t

Als er geen syntaxisfout wordt gevonden in het NGINX-configuratiebestand, krijgt u de volgende uitvoer.

Verifying NGINX configuration file

3. Voer vervolgens de onderstaande opdracht uit om een symbolische koppeling (ln -s) te maken van de /etc/nginx/sites-available naar de map /etc/nginx/sites-enabled/. Deze opdracht zorgt ervoor dat het configuratiebestand voor de virtuele host awstutorial.net wordt ingeschakeld.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

De indeling van sites-available en sites-enabled is standaard in een NGINX-installatie op Ubuntu, maar andere distributies kunnen een andere standaard gebruiken.

4. Herhaal stappen één tot en met drie om NGINX-configuratiebestanden voor virtuele hosts met de namen web1.awstutorial.net en web2.awstutorial.net aan te maken.

Wijzig de volgende regels in elk NGINX-configuratiebestand voor virtuele hosts:

  • Vervang de regel root /var/www/html/awstutorial.net door de webroot-map van elke subdomein (root /var/www/html/web1.awstutorial.net en root /var/www/html/web2.awstutorial.net).
  • Vervang de regel server_name awstutorial.net door de naam van elke subdomein (server_name web1.awstutorial.net en server_name web2.awstutorial.net).

5. Voer nu de onderstaande sudo ln opdrachten uit zoals je deed in stap drie om de configuratiebestanden voor de virtuele hosts in te schakelen.

# Activeert het NGINX virtuele host configuratiebestand voor web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Activeert het NGINX virtuele host configuratiebestand voor web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Voer de onderstaande systemctl opdracht uit om de NGINX (restart nginx) service te herstarten om alle configuratiewijzigingen toe te passen.

sudo systemctl restart nginx

7. Navigeer tot slot naar de URL’s van het domein en de subdomeinen in uw browser om te testen of de websites goed werken.

Als het domein en de subdomeinen laden, ziet u een bericht zoals hieronder.

Verifying websites are loading through the web browser.

HTTPS instellen op NGINX-domein en subdomein

U heeft met succes een NGINX-domein en subdomeinen op HTTP-protocol ingesteld en getest, wat geweldig is. Maar u moet de verbinding van uw domein en subdomeinen beveiligen door HTTPS in te schakelen. Hoe? Met een certificaat dat u zult krijgen van een Certificate Authority zoals Let’s Encrypt SSL.

1. Voer eerst de onderstaande opdracht uit om het Certbot softwarepakket te installeren (apt-get install certbot). Certbot stelt u in staat om een SSL-certificaat te downloaden voor uw domein en subdomeinen.

sudo apt-get install certbot python3-certbot-nginx -y

2. Voer vervolgens de certbot opdracht hieronder uit om een SSL-certificaat (certonly) voor uw domein (-d awstutorial.net) te downloaden. Let op dat u akkoord gaat met de algemene voorwaarden (—agree-tos) met uw e-mailadres (—email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Vervang het e-mailadres door uw eigen adres.

3. Typ ‘1’ om de NGINX Web Server-plugin (nginx) te selecteren om te verifiëren bij de ACME CA, zoals hieronder getoond.

Selecting Plugin to Authenticate with ACME CA

Na het selecteren van de NGINX Web Server-plugin ziet u de voortgang van het downloaden van het SSL-certificaat voor uw domein (awstutorial.net).

Standaard worden de SSL-certificaten van Let’s Encrypt opgeslagen in de /etc/letsencrypt/live/ map.

Showing Download Progress of the SSL Certificate

4. Voer nu elke opdracht hieronder uit zoals u deed in stap twee om SSL-certificaten te downloaden voor de overige subdomeinen (web1.awstutorial.net en web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Voer tot slot de ls opdracht hieronder uit om alle SSL-certificaten in de /etc/letsencrypt/live/ map te tonen die (*) de awstutorial.net in hun namen bevatten. Op deze manier kunt u verifiëren dat de SSL-certificaten bestaan.

ls /etc/letsencrypt/live/*awstutorial.net/

Hieronder ziet u de SSL-certificaten voor uw domein en subdomeinen.

Showing SSL certificate for all domains.

NGINX Virtuele Host Configureren om SSL-certificaten te Gebruiken

Op dit punt heb je al SSL-certificaten tot je beschikking. Maar hoe gebruik je ze om je domein en subdomeinen te beveiligen? Je definieert het pad van de certificaten in het server-blok van elk NGINX virtueel host configuratiebestand.

1. Open het NGINX virtuele host configuratiebestand van awstutorial.net dat zich bevindt in de map /etc/nginx/sites-available/ in je favoriete code-editor.

2. Vervang de inhoud van het bestand door de onderstaande code, waar je het pad van het SSL-certificaat van je domein en het SSL-protocol definieert (onder Pad van het SSL-certificaat).

server {
	     # Bindt de TCP-poort 80.
       listen 80;
	     # Definieert de domein- of subdomeinnaam. 
       # Als er geen server_name is gedefinieerd in een serverblok dan 
	     # gebruikt Nginx de 'lege' naam
       server_name awstutorial.net;
	     # Verwijs het verkeer door naar het overeenkomstige 
	     # HTTPS-serverblok met statuscode 301
       return 301 https://$host$request_uri;
       }

server {
        # Bindt de TCP-poort 443 en schakelt SSL in.
        listen 443 SSL;
	      # Rootdirectory gebruikt om naar een bestand te zoeken        
	      root /var/www/html/awstutorial.net; 
	      # Definieert de domein- of subdomeinnaam. 
        # Als er geen server_name is gedefinieerd in een serverblok dan 
	      # gebruikt Nginx de 'lege' naam
        server_name awstutorial.net;

	      # Pad van het SSL-certificaat
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Gebruik het bestand gegenereerd door het certbot-commando.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Definieer het pad van het dhparam.pem-bestand.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Geef een 404-foutmelding terug voor gevallen waarin de server 
	      # verzoeken ontvangt voor niet-traceerbare bestanden en mappen.
        try_files $uri $uri/ =404;
        }

    }

3. Herhaal hetzelfde proces (stappen één tot twee) voor de overgebleven configuratiebestanden van de virtuele hosts (web1.awstutorial.net en web2.awstutorial.net). Maar zorg ervoor dat u het pad naar het SSL-certificaat vervangt door het pad naar het certificaat van uw subdomein (onder Pad van het SSL-certificaat).

4. Voer nu het systemctl-commando hieronder opnieuw uit om de NGINX-service opnieuw op te starten om de configuratiewijzigingen toe te passen.

sudo systemctl restart nginx

5. Navigeer tot slot naar de URL’s van uw domein en subdomein in uw webbrowser. Maar gebruik deze keer in plaats van het HTTP-protocol HTTPS om te zien of ze werken.

Hieronder ziet u een hangslotsymbool in de adresbalk, wat aangeeft dat de website beveiligd is met uw SSL-certificaat.

Verifying Domain is Secure

Conclusie

In deze tutorial heb je geleerd hoe je een NGINX subdomein of meerdere domeinen kunt bedienen door een configuratiebestand van een virtuele host te configureren. Je hebt ook besproken hoe je je domeinen kunt beveiligen met een SSL-certificaat dat je ook definieert in het configuratiebestand van de virtuele host.

Waarom zou je deze opstelling niet gebruiken in een productieomgeving, zoals het hosten van meerdere apps op een enkele server, en betaalbare webhosting bieden?

Source:
https://adamtheautomator.com/nginx-subdomain/