/
Pack Hosting Panel

Nginx basics

Wat is Nginx en hoe kun je zelf Nginx configuraties toevoegen?


Wat is Nginx

Nginx is een open source webserver. Naast webserver wordt Nginx ook gebruikt als reverse proxy, HTTP cache en load balancer. Nginx is gericht op het leveren van hoge prestaties met een laag geheugen gebruik. Bij Hipex maken we gebruik van Nginx omdat tests uitwijzen dat we hier betere performance resultaten mee behalen dan Apache. Jaren geleden was dit verschil erg groot maar vandaag de dag komt Apache dicht bij de prestaties van Nginx in de buurt.

Hoe voeg ik Nginx configuraties toe bij Hipex?

Iedere website en webshop is verschillend. Daarom is het vaak gewenst om naast onze standaard platformconfiguratie nog een aantal ‘specifieke’ nginx configuraties toe te voegen voor de webshop of betreffende storeview. In dit artikel leggen we je uit hoe je zelf Nginx configuraties toevoegt bij Hipex.

De mappenstructuur

Onderstaande afbeelding weerspiegelt de onderliggende mappenstructuur van de bovengenoemde locatie.

var/etc/
    ├── <domeinnaam>
    ├── <domeinnaam>-443
    ├── <domeinnaam>-80
    ├── <domeinnaam>-8080
    ├── port-443
    ├── port-80
    ├── port-8080
    └── scope-http

Goed te weten is dat voor ieder domein en/of iedere domeinverwijzing welke in het hostingpaneel wordt toegevoegd de volgende vier mappen automatisch worden aangemaakt:

  • <domeinnaam>
  • <domeinnaam>-443
  • <domeinnaam>-80
  • <domeinnaam>-8080

Naast deze domeinspecifieke directories zullen ook de volgende directories aanwezig zijn:

  • port-443
  • port-80
  • port-8080
  • scope-http

Onderstaand lichten we de betreffende mappen verder toe.

Domeinspecifieke mappen

We beginnen met het toelichten van de eerste 4 bovengenoemde mappen. Het betreffen allemaal mappen welke specifiek voor een domeinnaam zijn. Configuraties welke in een van deze mappen worden geplaatst worden allemaal ingeladen in het server block van Nginx.

Map <domeinnaam>

De configuraties welke in deze map worden geplaatst dienen enkel voor deze domeinnaam te zijn, ongeacht op welke poort het request binnen komt. De configuraties in deze map zijn dus overrulend ten opzichte van de onderstaande 3.

Map <domeinnaam>-443

De configuraties welke in deze map worden geplaatst dienen aan de volgende twee criteria te voldoen:

  • Configuratie dient enkel voor de betreffende domeinnaam te zijn
  • De configuratie dient enkel voor verkeer via poort 443 te zijn (https)

Denk hierbij bijvoorbeeld aan een rewrite regel welke alleen van invloed is voor deze betreffende domeinnaam.

Map <domeinnaam>-80

De configuraties welke in deze map worden geplaatst dienen aan de volgende twee criteria te voldoen:

  • Configuratie dient enkel voor de betreffende domeinnaam te zijn
  • De configuratie dient enkel voor verkeer via poort 80 te zijn (http)

Denk hierbij bijvoorbeeld aan een rewrite regel welke al het http verkeer doorstuurt naar https voor deze betreffende domeinnaam.

Map <domeinnaam>-8080

De configuraties welke in deze map worden geplaatst dienen aan de volgende twee criteria te voldoen:

  • Configuratie dient enkel voor de betreffende domeinnaam te zijn
  • De configuratie dient enkel voor verkeer via poort 8080 te zijn

Algemene mappen

Nu hierboven de domeinspecifieke mappen zijn toegelicht, lichten we tot slot de 4 'algemene' directories toe.

port-443

Waar we bovenstaand hebben beschreven hoe je configuraties plaatst voor een bepaalde domeinnaam, zullen de configuraties welke in de 'port-443' map worden geplaatst van kracht zijn voor alle domeinen. Het enige criteria is dat de configuraties welke hier worden geplaatst alleen voor requests binnenkomend op poort 443 geldig zijn.

port-80

Bij deze map geldt hetzelfde als voor de 'port-443' map. De configuraties welke in deze map worden geplaatst zullen van kracht zijn voor alle domeinen. Het enige criteria is dat de configuraties welke hier worden geplaatst alleen voor requests binnenkomend op poort 80 geldig zijn.

port-8080

Ook bij deze map geldt hetzelfde als bij de 'port-443' en de 'port-80' mappen. Het enige criteria is dat de configuraties welke hier worden geplaatst alleen voor requests binnenkomend op poort 8080 geldig zijn.

scope-http

De configuraties welke in de scope-http map worden geplaatst zullen worden ingeladen in het HTTP location block. Hierdoor wordt het mogelijk gemaakt om ook Nginx configuraties toe te voegen op HTTP niveau. Dit biedt je bijvoorbeeld de optie om gebruik te maken van de ‘map’ variabele. Middels de ‘map’ variabele kan je bijvoorbeeld op een eenvoudige manier storecodes bij een domeinnaam configureren, hoe je dit doet kan je in dit artikel lezen.

Nginx configuraties toevoegen

Nu de mappenstructuur is toegelicht kunnen we onze Nginx configuratie gaan toevoegen. In ons voorbeeld gaan we zorgen dat al het HTTP verkeer wordt doorgestuurd naar HTTPS. Hiervoor maken we een nieuwe configuratie met de naam 'https.nginx.conf' aan op de locatie /home/<gebruikersnaam>/domains/<domeinnaam>/var/etc/port-80

Het is belangrijk dat alle Nginx configuraties welke je plaatst (onafhankelijk op welke (sub)directory) eindigen op de extensie .nginx.conf. In het aangemaakte bestand plaatsen we de volgende regel:

return 301 https://$host$request_uri;

Nginx herladen We kunnen vervolgens het bestand opslaan. Om de Nginx configuratie te activeren dienen we nog wel de Nginx configuratie te herladen. Dit kan met onderstaand commando: nginx-reload

Het betreffende commando geeft vervolgens de output weer of de Reload succesvol was. Indien de reload succesvol was zie je onderstaande melding:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginx configuration reload successful

Indien er een fout is gemaakt in de betreffende configuratie zal je een dergelijke melding krijgen:

nginx: [emerg] unknown "request_hipex_uri" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

De gebruikte 'requesthipexuri' variabele in ons voorbeeld zou dan ook 'request_uri' moeten zijn. Vergeet na aanpassing niet nogmaals het commando nginx-reload uit te voeren.