Inleiding
In de wereld van het internet komen verschillende technologieën samen om een oplossing te vormen die internetgebruikers in staat stelt om dynamische inhoud op het world wide web te bekijken. De LEMP-stack is een van die oplossingen. Het brengt vier technologieën samen die een complete serveroplossing vormen voor krachtige en dynamische websites. LEMP is een acroniem voor Linux, Nginx, MySQL en PHP. Linux is het besturingssysteem van de server. Nginx (wat wordt uitgesproken als Engine-X, vandaar de letter E in het acroniem) is de webserver-software. Vervolgens is MySQL het databasesysteem dat de gegevens van de website en gebruikers bevat. PHP is de scripttaal aan de serverzijde voor dynamische verwerking.
In deze handleiding laten we u zien hoe u een LEMP-stack installeert en configureert, en controleren we of alles naar verwachting werkt. Laten we beginnen!
Stap 1: Uw server configureren met Ubuntu 20.04
Ubuntu 20.04 is een op Linux gebaseerd besturingssysteem. Er bestaan verschillende op Linux gebaseerde server besturingssystemen, waaronder gratis en premium. De focus van deze handleiding ligt op Ubuntu 20.04, dat gratis en open-source is. Deze stap behandelt de eerste vereiste in het LEMP-stack-acroniem, de L. U moet een daadwerkelijke Ubuntu 20.04-installatie op uw VPS hebben om door te gaan met de volgende stappen. U kunt onze handleiding volgen over het instellen van uw Ubuntu Server. Optioneel, als u deze handleiding op uw lokale computer wilt volgen, kunt u de Ubuntu 20.04 server-installatiekopie rechtstreeks downloaden van de Ubuntu-website. U moet een normale niet-rootgebruiker met sudo-rechten configureren, omdat we een paar opdrachten zullen uitvoeren die sudo-rechten vereisen.
Step 2: Installing and Configuring Nginx Server
Webservers stellen ons in staat om inhoud zoals webpagina's aan websitebezoekers te tonen. Nginx is een populaire webserver die behoort tot de top vijf open-source webservers die de voorkeur hebben van ontwikkelaars. Deze stap behandelt de tweede vereiste in de LEMP-stack, de E voor Nginx. Ubuntu heeft een standaard pakketbron waar we pakketten vandaan halen voor gebruik in deze handleiding. Ubuntu is gebaseerd op Debian, dat apt of dpkg gebruikt om zijn pakketten te beheren. Voor pakketten uit de standaard pakketbron gebruiken we apt.
Als vuistregel geldt dat u de update-opdracht moet uitvoeren voordat u met een installatie op een Linux-systeem begint. Begin met het invoeren van de volgende opdracht in de terminal:
|
1 |
sudo apt update |
Zodra u hebt geüpdatet, kunt u Nginx installeren met de volgende opdracht:
|
1 |
sudo apt install nginx |
Zodra de installatie is voltooid, start Nginx automatisch. De volgende stap is het configureren van de firewall om verkeer door te laten. Ubuntu gebruikt het ufw (Uncomplicated Firewall)-pakket voor de configuratie van firewalls. Na de installatie registreert Nginx zichzelf als een service bij ufw. Ubuntu start de firewall-service automatisch bij het opstarten van het systeem, maar typ voor de zekerheid de volgende opdracht om deze in te schakelen:
|
1 |
sudo ufw enable |
Om de applicatieconfiguratie die ufw toestaat op te lijsten, voert u de volgende opdracht in:
|
1 |
sudo ufw app list |
Hieronder ziet u een screenshot die de uitvoer van de bovenstaande opdracht toont:

Zoals u kunt zien, is Nginx al geregistreerd bij ufw en heeft het drie profielen, zoals hieronder uitgelegd:
- Nginx Full – dit opent zowel poort 80 als 443. Poort 80 is voor normaal/onversleuteld verkeer, d.w.z. HTTP. Poort 443 is voor met TLS/SSL versleuteld verkeer, d.w.z. https.
- Nginx HTTP – dit opent alleen poort 80 – onversleuteld verkeer.
- Nginx HTTPS – dit opent alleen poort 443 – met TLS/SSL versleuteld verkeer.
Hoewel Nginx zich automatisch registreert bij ufw, is er geen verkeer naar uw server toegestaan totdat u dit zelf doet. U kunt ervoor kiezen om alle of een van de profielen toe te staan, maar het is beter om het meest beperkende profiel toe te staan dat nog steeds het verkeer toestaat dat u voor uw webserver hebt geconfigureerd. Omdat we in deze handleiding geen SSL hebben geconfigureerd, staan we alleen HTTP-verkeer op poort 80 toe. Als u nieuwsgierig bent, hebben we een handleiding over het configureren van SSL op de Nginx-server van Let's Encrypt met behulp van Certbot.
Laten we verkeer op poort 80 toestaan door de volgende opdracht in te voeren:
|
1 |
sudo ufw allow 'Nginx HTTP' |
Om te controleren of de wijziging is geslaagd, typt u de volgende opdracht:
|
1 |
sudo ufw status |

De bovenstaande uitvoer van het uitvoeren van de opdracht laat zien dat HTTP-verkeer nu is toegestaan. U kunt controleren of de server actief is door uw domein of het openbare IP-adres van uw server in de browser te openen. Als u geen domeinnaam had geconfigureerd en niet zeker bent van het openbare IP-adres van uw server, kunt u dit vinden met behulp van curl door de volgende opdracht uit te voeren:
|
1 |
curl -4 icanhazip.com |
Kopieer de uitvoer van de bovenstaande opdracht, wat uw openbare IP-adres is, naar de adresbalk van uw browser. Wanneer u de pagina laadt, ziet u de standaard Nginx-landingspagina:

De bovenstaande pagina geeft aan dat u Nginx met succes hebt geïnstalleerd.
Stap 3: Het MySQL-databasebeheersysteem installeren
Gegevensbeheer is een cruciaal onderdeel van elke dynamische website. MySQL is een databasebeheersysteem dat de gegevens van een website opslaat en beheert. Deze stap verzorgt de derde vereiste in de LEMP-stack, M. Voer de volgende opdracht in om MySQL te installeren:
|
1 |
sudo apt install mysql-server |
Nadat de installatie van MySQL is voltooid, moet u deze configureren voordat deze klaar is voor gebruik. Een deel van de configuratie omvat het beveiligen van de databaseserver. MySQL wordt geleverd met een script om u te begeleiden bij het beveiligen en instellen van wachtwoorden. De volgende opdracht start het script:
|
1 |
sudo mysql_secure_installation |

Het script vraagt of u de VALIDATE PASSWORD-component wilt instellen of op een willekeurige letter wilt drukken om door te gaan zonder de component in te schakelen.
De VALIDATE PASSWORD-component is een functie die wordt gebruikt om te controleren of het wachtwoord dat u voor een bepaalde gebruiker op uw databaseserver hebt ingevoerd, aan een specifiek criterium voldoet. U kunt deze configureren om te controleren op zaken als lengte, numerieke tekens, de aanwezigheid van hoofdletters of kleine letters, enz. Als deze niet is ingeschakeld, kunt u elk gewenst wachtwoord configureren. Indien ingeschakeld, moet u echter een wachtwoord gebruiken dat voldoet aan de criteria die u hebt opgegeven. Het inschakelen ervan kan problemen veroorzaken met pakketten die automatisch MySQL-gebruikersgegevens configureren, zoals het phpMyAdmin-pakket voor Ubuntu. Of u het wel of niet inschakelt, is een persoonlijke keuze. Uw database is nog steeds veilig als u deze niet inschakelt, zorg er alleen voor dat u sterke en unieke wachtwoorden gebruikt.
Als u op Y hebt gedrukt om de component in te schakelen, vraagt het script u om een niveau van wachtwoordvalidatie te selecteren:

Het script biedt 3 niveaus van wachtwoordvalidatie. Het niveau LOW vereist dat uw wachtwoord minimaal 8 tekens bevat. Het niveau MEDIUM vereist dat uw wachtwoord minimaal 8 tekens bevat, wat een mix moet zijn van hoofdletters, kleine letters en speciale tekens. Het niveau STRONG vereist een complex wachtwoord met 8 of meer tekens, wat een mix moet zijn van hoofdletters, kleine letters, speciale tekens en woorden, en mag niet gebaseerd zijn op algemene woordenboekwoorden, anders krijgt u foutmeldingen. Laten we voor het niveau Low gaan, typ 0 en druk op enter.
Het script vraagt u om het wachtwoord in te voeren en opnieuw in te voeren:

Typ y en druk op enter om het getypte wachtwoord te accepteren als uw root-wachtwoord. De volgende prompts zijn bedoeld om de beveiliging van de MySQL-server te verbeteren. Dit begint met het verwijderen van de standaard anonieme gebruikers die bij elke MySQL-installatie worden geleverd, het uitschakelen van root-inloggen vanaf een externe verbinding en het verwijderen van testdatabases. De laatste prompt vraagt u om de tabel met privileges opnieuw te laden om de opdrachten van kracht te laten worden. Typ y en druk op enter bij alle prompts:

De initiële beveiligingsconfiguratie is voltooid.
U kunt de versie van MySQL die u hebt geïnstalleerd controleren door de volgende opdracht uit te voeren:
|
1 |
sudo mysql –V |
Hier is de versie die we voor deze handleiding gebruiken:
![]()
Voor Ubuntu-systemen met MySQL-versies vanaf 5.7 en nieuwer is de root-gebruiker geconfigureerd om te authenticeren met de auth_socket-plugin en niet met het wachtwoord. Dit zorgt voor een betere beveiliging, maar het kan een probleem zijn met externe pakketten zoals het phpMyAdmin-pakket. Als u liever doorgaat met het gebruik van de auth_socket-plugin, ga dan naar Stap 4.
Als u in plaats daarvan verbinding wilt maken met een wachtwoord, moet u de authenticatiemethode configureren om mysql_native_password te gebruiken.
Start de MySQL-prompt door de volgende opdracht in te voeren:
|
1 |
sudo mysql |
MySQL wordt geleverd met verschillende standaarddatabases. U kunt een lijst met standaarddatabases bekijken door de volgende query in te voeren in uw terminal:
|
1 |
show databases; |

De database genaamd mysql slaat verschillende MySQL-gerelateerde configuraties op. Deze database heeft een tabel genaamd users die de gebruikersgegevens en de authenticatiemethode voor elk bevat. We kunnen SQL-queries gebruiken om informatie uit een tabel op te halen, te wijzigen en te verwijderen. Voer de volgende query in op uw terminal om details te krijgen over welke authenticatiemethode elke gebruiker gebruikt:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

De bovenstaande uitvoer laat zien dat de root-gebruiker feitelijk authenticeert met de auth_socket-plugin. Om de authenticatiemethode voor de root-gebruiker te wijzigen, voert u de volgende instructie in uw terminal in. Vergeet niet deze te wijzigen zodat deze overeenkomt met de wachtwoordsterkte voor het medium niveau dat we in een eerdere stap hadden ingesteld, anders veroorzaakt dit een fout:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
Zodra de query met succes is uitgevoerd, voert u de opdracht flush privileges uit om de wijzigingen onmiddellijk van kracht te laten worden:
|
1 |
FLUSH PRIVILEGES; |
Voer de onderstaande select-instructie nogmaals uit om te controleren of de wijzigingen van kracht zijn geworden:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

Uit de uitvoer blijkt dat de root-gebruiker nu zal authenticeren met mysql_native_password. U kunt de mysql-prompt afsluiten door exit te typen en op enter te drukken.
U kunt proberen in te loggen met het wachtwoord dat u hebt ingesteld door de volgende opdracht in te voeren:
|
1 |
mysql -u root –p |
De prompt zal u om uw wachtwoord vragen. Als dit overeenkomt, ziet u de MySQL-prompt. U hebt uw server met succes geconfigureerd met MySQL. Sluit vervolgens de MySQL-prompt af.
Stap 4: PHP installeren en Nginx configureren om de PHP-processor te gebruiken
PHP is een acroniem voor PHP: Hypertext Preprocessor. Het is een veelgebruikte open-source scripttaal aan de serverzijde voor websites en webapplicaties. PHP verzorgt de vierde vereiste in de LEMP-stack. PHP helpt bij het genereren van dynamische inhoud op een website. Het kan worden gebruikt als tussenpersoon tussen uw webpagina's en het databasesysteem. Het leest gegevens uit de database en presenteert deze aan uw websitebezoekers. Bovendien kan het gegevens in de database invoegen, bijwerken en verwijderen.
Nginx mist de ingebouwde PHP-verwerkingsplugins zoals andere webservers, dus u moet php-fpm installeren om verzoeken van Nginx naar PHP door te sturen voor verwerking. Voeg eerst de Ubuntu universe-repository toe, die gratis en open-source software bevat die wordt onderhouden door de Ubuntu-gemeenschap. Voer de volgende opdracht in uw terminal in:
|
1 |
sudo add-apt-repository universe |
Installeer vervolgens het php-fpm-pakket samen met het php-mysql-hulppakket om PHP in staat te stellen met MySQL te communiceren, met behulp van de volgende opdracht:
|
1 |
sudo apt install php-fpm php-mysql |
Op het moment van schrijven van deze handleiding is de PHP-versie die met de bovenstaande opdracht is geïnstalleerd 7.2.24. Daarom wordt het pakket php-fpm7.2 geïnstalleerd. Houd hier rekening mee bij het bijwerken van de serverblokken en zorg ervoor dat u de juiste versie invoert, anders wordt uw pagina niet geladen.
U kunt de PHP-versie controleren door de volgende opdracht in te voeren:
|
1 |
php -v |

Op dit punt zijn alle componenten van de LEMP-stack geïnstalleerd. Wat u nu moet doen, is Nginx configureren om verzoeken naar de PHP-processor te sturen. In Nginx wordt de configuratie gedaan binnen serverblokken. Serverblokken zijn het equivalent van de virtual hosts van Apache. Voor meer informatie kunt u onze handleiding over Nginx-serverblokken bekijken.
Voor deze handleiding maken we een serverblok voor een test.com-domein met dezelfde naam, u bent vrij om een naam naar keuze te kiezen. Serverblokken bevinden zich in de map /etc/nginx/sites-available/. Gebruik nano om het serverblokbestand aan te maken door het volgende commando in te voeren:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
Typ het volgende script in het bestand:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Hier is een korte beschrijving van wat elke richtlijn doet:
- listen – definieert de poort waarop Nginx zal luisteren. Poort 80 is de standaardpoort, maar als u SSL had ingesteld, zou u 443 invoeren.
- root – bevat de map waarin de map van de site wordt opgeslagen.
- index – instrueert Nginx om prioriteit te geven aan het serveren van index.php-bestanden, indien deze op verzoek beschikbaar zijn.
- server_name – definieert de naam van het serverblok, het bevat het openbare IP-adres of de domeinnaam van uw server.
- location/ – het eerste locatieblok bevat de try_files-richtlijn. Het controleert op het bestaan van bestanden die overeenkomen met een URI-verzoek; indien niet gevonden, wordt een 404-fout geretourneerd.
- location ~ \.php$ – deze richtlijn verwerkt de PHP-verwerking door Nginx-verzoeken door te sturen via het bestand fastcgi-php.conf en het bestand php7.2-fpm.sock, dat definieert welke socket aan php-fpm moet worden gekoppeld. Dit commando controleert de status van php-fpm, we specificeren de versie als 7.2, wat de versie is die we hebben. Zorg ervoor dat u dit controleert met de versie die u heeft:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – deze richtlijn verwerkt de .htaccess-bestanden, die niet door Nginx worden verwerkt. De richtlijn 'deny all' zorgt ervoor dat er geen htaccess-bestand aan de bezoekers wordt geserveerd.
Na het toevoegen van het script aan uw test.com-bestand, typt u Ctrl + O en drukt u vervolgens op Enter om het bestand op te slaan. Typ Ctrl + X om de editor te sluiten.
Vervolgens moet u het serverblok inschakelen door het volgende commando in te voeren om een symbolische link naar /etc/nginx/sites-enabled te maken:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
Ontkoppel vervolgens het standaard serverblok van sites-enabled door de volgende opdracht in te voeren:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Test je nieuwe configuratie door de volgende opdracht in te voeren:
|
1 |
sudo nginx -t |
Als de syntaxis in orde is, herlaad Nginx dan met de volgende opdracht:
|
1 |
sudo systemctl reload nginx |
In deze stap is je LEMP-stack geïnstalleerd en geconfigureerd. In de volgende stap maken we een testbestand om er zeker van te zijn dat de verschillende componenten goed verbinding maken.
Stap 5: Een PHP-bestand maken om je LEMP-stack te testen
In deze stap maken we een .php-bestand en voeren dit uit op de Nginx-server om te controleren of het correct werkt. We gebruiken de globale functie phpinfo() om de beschikbare php-pakketten te controleren. Voer de volgende opdracht in om een .php-bestand te openen in nano:
|
1 |
sudo nano /var/www/html/test.php |
Typ in de nano-editor het volgende codefragment:
|
1 |
<?php phpinfo(); |
Sla het bestand op en sluit het. Om de zojuist gemaakte pagina in je browser te bezoeken, zoek je je domein of IP-adres op en navigeer je er als volgt naartoe:
|
1 |
http://your_server_domain_or_IP/test.php |
Je zou nu de PHP-infopagina moeten kunnen zien:

De bovenstaande pagina laat zien dat je Nginx succesvol hebt ingesteld. Omdat het bestand dat je hebt gemaakt om te testen gedetailleerde informatie over je server bevat, moet je niet vergeten het te verwijderen. Voer de volgende opdracht in om het bestand te verwijderen:
|
1 |
sudo rm /var/www/html/test.php |
Als je in de toekomst je configuraties opnieuw wilt testen, kun je het bestand altijd opnieuw aanmaken.
Conclusie
In deze handleiding heb je een LEMP-stack geconfigureerd op je Ubuntu 20.04, wat een van de krachtigste stacks voor de ontwikkeling van webapplicaties is. Vanaf hier zou je vrijwel elke website, web-app of server-side logica voor je mobiele applicatie moeten kunnen hosten. Om ervoor te zorgen dat je website inhoud serveert via een beveiligde SSL-verbinding, raden we je aan onze handleiding te bekijken over het configureren van SSL-certificaten op de Nginx-server.
Veel plezier met computeren!
Reacties
Nog geen reacties. Wees de eerste.