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.