LAMP stack installeren op Ubuntu 24.04 met PHP-FPM
Installeer een volledige LAMP stack op Ubuntu 24.04 met Apache, MariaDB en PHP 8.3. Leer hoe u unix_socket authenticatie en PHP-FPM configureert voor een veilige server.
Wat u gaat bouwen
Een LAMP-stack bestaat uit vier componenten op één Ubuntu 24.04-server: Linux als basis, Apache voor het afhandelen van HTTP-verkeer, MariaDB voor gegevensopslag en PHP 8.3 voor het uitvoeren van de code. Aan het einde van deze handleiding beschikt u over een op namen gebaseerde virtual host die een applicatiemap serveert, een database met een specifieke gebruiker met minimale rechten, PHP gekoppeld aan Apache via PHP-FPM, en een gratis Let's Encrypt-certificaat voor de beveiliging.
De installatie zelf bestaat uit vier apt commando's. Bijna alles in deze handleiding betreft de configuratie tussen de onderdelen en het voorkomen van veelvoorkomende fouten waardoor een nieuwe stack een lege pagina toont, broncode als download aanbiedt aan de browser, of de toegang tot de zojuist geïnstalleerde database weigert. Elk van deze problemen heeft een herkenbaar patroon, en elk daarvan wordt hieronder benoemd met de exacte foutmelding die u zult zien.
Vereisten en de belangrijkste valkuilen
Ga uit van een schone Ubuntu 24.04 KVM VPS met een sudo-gebruiker of root, en een publiek IPv4-adres. Een minimale stack draait op 1 GB RAM; wijs 2 GB toe voordat u een applicatie met een database in gebruik neemt, omdat de standaardbuffers van MariaDB en een aantal PHP-FPM workers de eerste gigabyte snel verbruiken.
Twee zaken moeten in orde zijn voordat Certbot aan het einde werkt, dus regel deze nu alvast. U heeft een domeinnaam nodig met een A-record dat naar het publieke IP-adres van de VPS wijst; Let's Encrypt valideert via HTTP op die naam, en een kaal IP-adres kan nooit een certificaat verkrijgen. Daarnaast moeten poorten 80 en 443 bereikbaar zijn vanaf het internet. Bij veel providers betekent dit dat u deze poorten moet openen in de netwerkfirewall van het configuratiescherm en in ufw op de server zelf. DNS-wijzigingen kunnen tot een uur duren voordat ze zijn doorgevoerd, dus stel het A-record als eerste in; dan is het actief tegen de tijd dat u het nodig heeft.
Stap 1 - Apache installeren en de standaardpagina bevestigen
sudo apt update
sudo apt install -y apache2apt start en activeert de service voor u. Controleer dit:
systemctl status apache2U zoekt naar een regel met de tekst active (running). Open nu http://YOUR_SERVER_IP/ in een browser. De Apache2 Ubuntu Default Page met de grote "It works!"-banner is het juiste resultaat; dit is het bewijs dat Apache actief is en geen foutmelding. Die pagina bevindt zich op /var/www/html/index.html en wordt geserveerd door de meegeleverde standaard virtual host 000-default.conf. U zult beide later uitschakelen; voor nu is hun aanwezigheid precies wat u wilt zien.
Als de pagina helemaal niet laadt, maar systemctl aangeeft dat het proces draait, dan blokkeert een firewall de verbinding. Dat is de volgende stap.
Stap 2 - Open de firewall voor HTTP en HTTPS
Het apache2-pakket registreert drie ufw-applicatieprofielen. Toon deze in een lijst:
sudo ufw app listU ziet Apache, Apache Full en Apache Secure. Apache is alleen voor poort 80, Apache Secure is alleen voor 443 en Apache Full is voor beide; dit is het profiel dat u nodig heeft, omdat u aan het einde TLS toevoegt.
sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enableSta OpenSSH toe voordat u ufw enable uitvoert. ufw weigert standaard al het inkomende verkeer. Als u dit inschakelt zonder een SSH-regel, verbreekt u direct uw eigen verbinding zodra deze wordt geactiveerd; u behoudt de huidige sessie, maar kunt nooit meer opnieuw verbinding maken. Bevestig met sudo ufw status; u wilt dat OpenSSH, Apache Full en hun v6-equivalenten allemaal op ALLOW staan.
Stap 3 - MariaDB installeren en beveiligen
sudo apt install -y mariadb-server
systemctl status mariadbUbuntu 24.04 levert MariaDB 10.11, een long-term-support release, dus u heeft geen externe repository nodig. Zodra de service draait, kunt u deze beveiligen:
sudo mysql_secure_installationHet is raadzaam de aanwijzingen te lezen in plaats van blind op Enter te drukken. Wanneer er wordt gevraagd naar het current root password, drukt u op Enter; er is immers nog geen wachtwoord. Wanneer er wordt gevraagd "Switch to unix_socket authentication?", maakt uw antwoord niets uit omdat dit in dit pakket al is ingeschakeld, dus druk op n. Kies n bij "Change the root password?" om de reden in de volgende alinea, en beantwoord de rest met Y: verwijder anonieme gebruikers, sta geen externe root-login toe, verwijder de testdatabase en herlaad de priviliègetabellen.
Dit is het punt dat voor verwarring zorgt. Bij de MariaDB-versie van Ubuntu gebruikt het root database-account unix_socket-authenticatie, geen wachtwoord. Dit betekent dat de database de besturingssysteem-gebruiker vertrouwt waarmee u al bent ingelogd. Daarom werkt dit vanuit een root-shell:
sudo mysql...en u komt direct bij een MariaDB [(none)]>-prompt zonder dat er om een wachtwoord wordt gevraagd. Hetzelfde commando uitgevoerd als een gebruiker zonder rechten wordt geweigerd, en dat is precies de bedoeling: toegang tot de database-root is gekoppeld aan sudo op de server, en er is geen wachtwoord dat gestolen, gefisht of via brute-force gekraakt kan worden. Dit is veiliger dan een wachtwoord, dus laat dit ongewijzigd. De regel die hieruit volgt: laat een applicatie nooit verbinding maken met het root-account. Maak per applicatie een specifieke gebruiker aan (Stap 7), omdat een app die via TCP verbinding maakt met een gebruikersnaam en wachtwoord sowieso geen gebruik kan maken van socket-authenticatie, en u wilt dat elke app beperkt blijft tot zijn eigen database.
Stap 4 - PHP 8.3 met PHP-FPM installeren
De standaardversie van PHP in Ubuntu 24.04 is 8.3. Installeer de FPM-procesbeheerder en de extensies die een typische applicatie nodig heeft:
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-cli \
php8.3-curl php8.3-xml php8.3-mbstring php8.3-zipLet op wat niet in die lijst staat: libapache2-mod-php. Dat oudere pakket integreert een PHP-interpreter in elk Apache-proces. Het is eenvoudig, maar elke worker draagt een kopie van PHP met zich mee, ongeacht of deze een script of een statische afbeelding serveert. De twee delen een levenscyclus en het werkt alleen met de prefork MPM van Apache, de minst efficiënte variant. PHP-FPM voert PHP daarentegen uit als een eigen pool van processen waar Apache via een socket mee communiceert. Apache kan vervolgens de multi-threaded event MPM gebruiken voor statische bestanden en alleen PHP-verzoeken doorsturen. De pool wordt onafhankelijk van de webserver geoptimaliseerd en exact dezelfde FPM-configuratie werkt later ook als u nginx ervoor plaatst. Het is niet voor niets de huidige standaard.
Apache bereikt FPM via de proxy_fcgi-module. Schakel deze in, activeer de configuratie die door het FPM-pakket is geplaatst en herstart:
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2a2enconf php8.3-fpm activeert /etc/apache2/conf-available/php8.3-fpm.conf, dat de regel bevat die PHP-bestanden naar de FPM-socket routeert. De kern hiervan komt overeen met elk .php-bestand en stuurt dit door naar de socket op /run/php/php8.3-fpm.sock:
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>U hoeft dat bestand niet te bewerken; het wordt correct geleverd. Het kennen van het socketpad is echter essentieel om later fouten zoals "PHP downloads instead of running" en "Primary script unknown" te diagnosticeren. Beide problemen ontstaan doordat Apache en FPM het niet eens zijn over deze socket of het bestand erachter.
Stap 5 - Een op naam gebaseerde virtual host voor uw applicatie
Met op naam gebaseerde virtual hosting kan één IP-adres meerdere sites bedienen; Apache kiest de site op basis van de Host:-header in het verzoek. Maak een map aan voor de applicatie, op een locatie buiten de standaard /var/www/html:
sudo mkdir -p /var/www/testapp
sudo chown -R www-data:www-data /var/www/testapp
sudo chmod -R 755 /var/www/testappEigenaarschap is van belang. Apache en PHP-FPM draaien beide als de www-data-gebruiker op Ubuntu. Bestanden die de webserver moet lezen, en mappen waar een applicatie naar moet schrijven, zoals een uploadmap, moeten daarom eigendom zijn van www-data. Als u de bestanden ook wilt bewerken met uw eigen gebruikersaccount, is een gangbare methode om de bestanden in uw eigen bezit te houden en uw gebruiker toe te voegen aan de www-data-groep; voor een standaard implementatie is www-data:www-data de meest voor de hand liggende keuze.
Maak de virtual host aan op /etc/apache2/sites-available/testapp.conf:
<VirtualHost *:80>
ServerName app.example.com
DocumentRoot /var/www/testapp
<Directory /var/www/testapp>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/testapp-error.log
CustomLog ${APACHE_LOG_DIR}/testapp-access.log combined
</VirtualHost>Stel ServerName in op uw werkelijke domeinnaam. Options -Indexes voorkomt dat Apache de inhoud van de map toont wanneer er geen indexbestand aanwezig is; zonder deze instelling kunnen bezoekers door uw broncode bladeren. AllowOverride All zorgt ervoor dat een .htaccess-bestand werkt, wat de meeste PHP-applicaties verwachten voor nette URL's; wijzig dit naar None voor een kleine snelheidswinst als uw applicatie dit niet nodig heeft. Schakel deze site in, schakel de standaard site uit, controleer de configuratie en herlaad:
sudo a2ensite testapp
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2apache2ctl configtest hoort Syntax OK weer te geven. De a2dissite 000-default-regel is de regel die mensen vaak vergeten, en dit is de reden waarom de standaardpagina later vast lijkt te zitten, zoals beschreven in de sectie over fouten.
Stap 6 - Controleer of PHP werkt en verwijder het bewijs
Plaats een PHP-bestand van één regel in de hoofdmap van de applicatie:
echo "<?php phpinfo();" | sudo tee /var/www/testapp/info.phpBezoek http://app.example.com/info.php. Een correct resultaat is de lange paars-grijze PHP Version 8.3.x-tabel met uw geladen modules, waarbij de regel Server API de waarde FPM/FastCGI bevat. Die laatste regel bevestigt dat verzoeken via PHP-FPM verlopen en niet via mod_php.
Verwijder het bestand nu onmiddellijk:
sudo rm /var/www/testapp/info.phpphpinfo() legt uw exacte PHP-versie, elke geladen extensie, bestandspaden en omgevingsdetails bloot; dit is een geschenk voor iedereen die de server scant op een versie met een bekend lek. Het is een test, geen functionaliteit. Verwijder het bestand zodra u de pagina heeft gezien. Als uw browser in plaats van de tabel aanbiedt om info.php te downloaden, is PHP niet correct gekoppeld aan Apache; ga naar de sectie over fouten voordat u verdere stappen onderneemt.
Stap 7 - De applicatiedatabase en een gebruiker met minimale rechten aanmaken
Open de database als de root-gebruiker die via een socket wordt geverifieerd:
sudo mysqlMaak vervolgens één database en één gebruiker aan die uitsluitend toegang heeft tot die specifieke database:
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;Hierbij zijn drie bewuste keuzes gemaakt. utf8mb4 is echte vier-byte UTF-8; de oude utf8-alias kapt emoji's en sommige CJK-tekens stilletjes af, gebruik daarom altijd utf8mb4. De rechten zijn verleend op appdb.*, niet op *.*: deze gebruiker kan alleen zijn eigen database benaderen en niets anders. Hierdoor kan een SQL-injectiekwetsbaarheid in de applicatie niet de tabellen van alle andere sites uitlezen. En 'appuser'@'localhost' beperkt het account tot verbindingen die vanaf de server zelf afkomstig zijn.
Test dit als de zojuist aangemaakte gebruiker:
mysql -u appuser -p appdbEr wordt om het wachtwoord gevraagd en u komt terecht bij een MariaDB [appdb]>-prompt. Merk op dat er geen -h-vlag aanwezig is; laat deze weg zodat de client verbinding maakt via de lokale Unix-socket, wat door MariaDB precies als localhost wordt geteld. Een belangrijk aandachtspunt: voor MySQL en MariaDB betekent localhost de Unix-socket en 127.0.0.1 een TCP-verbinding. Op een standaard Ubuntu 24.04 MariaDB-installatie herleidt de server een TCP-verbinding vanaf 127.0.0.1 terug naar localhost, waardoor beide overeenkomen met het account. Echter, op servers waar skip-name-resolve is ingeschakeld (een veelgebruikte prestatie-optimalisatie en de standaard in veel container-images), worden de twee als verschillende hosts behandeld. Een applicatie die verbinding maakt via 127.0.0.1 wordt dan geweigerd met ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES), zelfs als het wachtwoord correct is.
Stel uw applicatie daarom in op host localhost, gebruiker appuser, database appdb, en nooit op root. Zowel PHP's mysqli als PDO schakelen over naar de Unix-socket wanneer de host de letterlijke tekenreeks localhost is, wat overeenkomt met het account dat u zojuist heeft aangemaakt. Als een framework per se een numerieke TCP-host vereist, maak de gebruiker dan aan op basis van de daadwerkelijke verbindingsmethode, 'appuser'@'127.0.0.1', of gebruik @'%' (in combinatie met een firewallregel) alleen als de database vanaf een andere machine moet worden benaderd.
Stap 8 - HTTPS toevoegen met Certbot
Het aanbieden van een inlogformulier via onversleuteld HTTP verstuurt wachtwoorden in leesbare tekst, en elke moderne browser markeert de pagina als "Niet veilig". Certbot lost dit op met één commando. Installeer het met de Apache-plugin:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apacheCertbot gebruikt hier twee plugins. De apache authenticator bewijst dat u het domein beheert door kortstondig een challenge-bestand aan te bieden via uw actieve Apache, en de apache installer herschrijft vervolgens uw virtual host om het 443-blok toe te voegen, verwijst naar het nieuwe certificaat en leidt standaard al het HTTP-verkeer om naar HTTPS. Sinds Certbot 2.0 is er geen vraag meer over de redirect; geef --no-redirect mee als u onversleuteld HTTP wilt blijven aanbieden. Omdat u in Stap 5 een echte ServerName heeft ingesteld, detecteert Certbot het domein automatisch. Certificaten zijn 90 dagen geldig en het pakket installeert een systemd-timer die deze vernieuwt; controleer de timer met sudo certbot renew --dry-run, wat zou moeten eindigen in Congratulations, all simulated renewals succeeded.
Voor de volledige uitleg over de challenge, de vernieuwingstimer en de DNS- en firewallvereisten, zie de bijbehorende handleiding over het uitgeven van gratis Let's Encrypt TLS-certificaten met Certbot op Apache.
Back-ups, upgrades en hardening
Maak back-ups van de twee onderdelen die uw status bepalen: de databases en de web root. Een dagelijkse logische dump is de meest betrouwbare en eenvoudige methode, sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz', die vervolgens van de server wordt gekopieerd. Het is essentieel om de gehele pipeline in sudo sh -c te verpakken: zonder dit voert de shell de > /root/... redirect uit als uw eigen gebruiker, wat resulteert in een Permission denied-fout, omdat alleen mysqldump de sudo heeft geërfd. --single-transaction zorgt voor een consistente snapshot van de InnoDB-tabellen zonder deze te vergrendelen. Combineer dit met een tar van /var/www en /etc/apache2/sites-available, zodat u de volledige stack op een nieuwe VPS kunt herstellen vanaf deze bestanden.
Upgrades zijn een standaard sudo apt update && sudo apt upgrade-proces. Het punt waar het vaak misgaat is een PHP-versie-update, wanneer een toekomstige Ubuntu-release de standaard wijzigt naar PHP 8.4; apt installeert dan mogelijk php8.4-fpm naast 8.3, de socket wordt /run/php/php8.4-fpm.sock, terwijl uw Apache-configuratie nog steeds naar de 8.3-socket verwijst. Schakel de nieuwe configuratie in (sudo a2enconf php8.4-fpm) en schakel de oude uit, anders zal uw site na een verder routineuze upgrade een Primary script unknown-foutmelding geven. Omdat PHP-releases sneller verschijnen dan die van een LTS-distributie, kunt u beter de huidige PHP-releasenotes raadplegen in plaats van een specifieke patchversie vast te pinnen.
Twee hardening-stappen zijn direct vanaf de eerste dag aan te raden. Ten eerste, installeer Fail2Ban voor het monitoren van SSH op de server; een publieke VPS krijgt binnen enkele minuten te maken met geautomatiseerde inlogpogingen, en een kleine jail reduceert duizenden pogingen tot een handvol voordat een ban volgt. Ten tweede, als u liever Apache virtual hosts, MariaDB-databases en gebruikers beheert via een browser in plaats van handmatig bestanden te bewerken, dan is het Webmin webgebaseerde configuratiescherm een optie die boven op deze stack draait en dezelfde configuratiebestanden aanstuurt die u zojuist heeft geschreven. Geen van beide vervangt het begrijpen van de onderdelen, maar beide verminderen de dagelijkse werklast.
Foutmodi en de bijbehorende meldingen
De standaardpagina verdwijnt niet. U heeft uw virtual host bewerkt en herladen, maar de browser toont nog steeds de "Apache2 Ubuntu Default Page" met de "It works!"-banner. Apache serveert de eerste overeenkomende virtual host. Wanneer geen enkele ServerName overeenkomt met het verzoek, wint de alfabetisch eerste configuratie; 000-default.conf sorteert vóór testapp.conf. Of de hostnaam van het verzoek komt niet overeen met uw ServerName, of u heeft sudo a2dissite 000-default niet uitgevoerd. Schakel de standaardconfiguratie uit met sudo systemctl reload apache2 en bevestig dit met apache2ctl -S, die de vhost-map afdrukt en toont welke configuratie de standaard is. Leeg ook de browsercache; een gecachte 200-status van de oude pagina blijft anders hardnekkig aanwezig.
Een .php-bestand wordt gedownload in plaats van uitgevoerd. U opent info.php en de browser downloadt een bestand met de ruwe <?php-broncode, of toont deze als platte tekst in plaats van het script uit te voeren. Apache serveert het bestand als een statisch asset omdat de PHP-handler niet is gekoppeld, u sudo a2enmod proxy_fcgi of sudo a2enconf php8.3-fpm heeft overgeslagen, of Apache daarna niet heeft herstart. Voer alle drie de stappen uit (Stap 4) en herlaad. Bevestig dat de module is geladen met apache2ctl -M | grep fcgi, die proxy_fcgi_module zou moeten tonen. Dit is een lek van broncode en geen cosmetische fout; los dit op voordat u echte data op de server plaatst.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'. U heeft mysql -u root of mariadb -u root uitgevoerd zonder sudo. Het root-account gebruikt unix_socket-authenticatie, dus het accepteert u alleen wanneer uw OS-gebruiker daadwerkelijk root is. De oplossing is sudo mysql, zonder -u root en zonder wachtwoord. Deze melding is het verwachte gedrag van correct werkende socket-authenticatie, geen defecte installatie.
ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' vanuit de applicatie, met het juiste wachtwoord. Het account bestaat als 'appuser'@'localhost', maar uw app maakt via TCP verbinding met 127.0.0.1 op een server waar hostnaam-resolutie is uitgeschakeld (skip-name-resolve). MariaDB ziet de twee daarom als verschillende hosts: localhost is de Unix-socket, 127.0.0.1 is TCP. Wijs de app naar host localhost zodat deze de socket gebruikt en overeenkomt met het account, of maak een tweede account 'appuser'@'127.0.0.1' aan als het framework alleen TCP ondersteunt.
AH01071: Got error 'Primary script unknown' in /var/log/apache2/testapp-error.log, waarbij de browser File not found. toont. Apache heeft het verzoek doorgegeven aan PHP-FPM, maar FPM kon het script niet vinden op het pad dat Apache opgaf. Er zijn twee gebruikelijke oorzaken: de FPM-socket in uw configuratie wijst naar een PHP-versie die niet is geïnstalleerd (bijvoorbeeld een php8.4-socket na een upgrade terwijl alleen 8.3 draait), of het bestand bevindt zich daadwerkelijk niet op de locatie omdat DocumentRoot en de werkelijke map niet overeenkomen. Controleer of de socket bestaat met ls -l /run/php/, bevestig dat DocumentRoot overeenkomt met de locatie van het bestand, en herstart zowel php8.3-fpm als apache2.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name bij elke herstart. Dit is een onschadelijke waarschuwing, geen fout; Apache meldt dat er geen globale ServerName is ingesteld. Onderdruk deze melding door ServerName your.domain naar /etc/apache2/conf-available/servername.conf te schrijven en sudo a2enconf servername uit te voeren.
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 wanneer Apache start. Een andere webserver bezet al poort 80, vaak een achtergebleven nginx van een vorig experiment. Zoek deze met sudo ss -ltnp | grep :80, stop vervolgens de andere service en schakel deze uit voordat u Apache start.
FAQ
mod_php of PHP-FPM - wat moet ik gebruiken?
Gebruik PHP-FPM. mod_php integreert een interpreter in elk Apache-proces en dwingt het trage prefork MPM af, waardoor Apache PHP-overhead met zich meedraagt, zelfs bij het serveren van een statische afbeelding. PHP-FPM voert PHP uit als een afzonderlijke, onafhankelijk afgestelde pool die Apache via een socket bereikt. Dit werkt met het snellere, multi-threaded event MPM en is later zonder wijzigingen over te zetten naar nginx. Dit is de moderne standaard; mod_php is alleen zinvol voor een verouderde applicatie die afhankelijk is van specifiek in-process gedrag.
Waarom downloadt mijn browser het PHP-bestand in plaats van het uit te voeren?
Apache behandelt het .php-bestand als een statische download omdat er geen PHP-handler aan is gekoppeld. Op Ubuntu 24.04 met FPM betekent dit dat u een van de stappen sudo a2enmod proxy_fcgi, sudo a2enconf php8.3-fpm of de daaropvolgende herstart van Apache heeft gemist. Voer alle drie de stappen uit en herlaad de service; controleer daarna met apache2ctl -M | grep fcgi of proxy_fcgi_module in de lijst staat. Zolang dit niet is opgelost, lekt de server broncode, dus beschouw dit als urgent.
Waarom wordt root-toegang geweigerd in MariaDB, zelfs met het juiste wachtwoord?
Omdat er geen wachtwoord is ingesteld, authenticeert MariaDB op Ubuntu het root-account via unix_socket, waardoor het gekoppeld is aan de root-gebruiker van het besturingssysteem. mysql -u root vanaf een normale shell geeft volgens het ontwerp ERROR 1698 (28000): Access denied for user 'root'@'localhost' terug. Verbind in plaats daarvan met sudo mysql en maak een afzonderlijke gebruiker aan met wachtwoordauthenticatie voor elke applicatie, in plaats van root te hergebruiken.
Hoe voeg ik HTTPS toe aan mijn LAMP-site?
Installeer certbot en python3-certbot-apache, laat een A-record van een domein naar de server wijzen en voer vervolgens sudo certbot --apache uit. De Apache-authenticator bewijst domeincontrole via uw draaiende Apache-instantie; het installatieprogramma herschrijft de virtual host voor poort 443 en stelt automatische vernieuwing in. De volledige handleiding voor Certbot en Apache behandelt de uitdaging, de timer voor vernieuwing en de meest voorkomende fouten.