LEMP-stack is een acroniem dat staat voor de volgende pakketten samen gecombineerd: Linux-kernel, Nginx-webserver, MariaDB-database (of MySQL) en PHP server-side programmeertaal). Deze softwarepakketten worden tegenwoordig veel gebruikt op servers op internet om dynamische websites of interactieve webtoepassingen in te zetten.
Nginx is een moderne en hulpbronnenefficiënte webserver, actief in ontwikkeling en de op één na meest gebruikte op het internet na Apache HTTP-server vanwege het feit dat het een asynchrone gebeurtenisgestuurde benadering gebruikt om verzoeken af te handelen.
Deze tutorial zal je helpen bij het installeren en configureren van de LEMP-stack (Nginx met MariaDB en PHP7) op de nieuwste release van Debian 9.
VEREISTEN
- Nieuwste versie van het Debian 9-besturingssysteem, te verkrijgen via de volgende link https://www.debian.org/CD/http-ftp/ , helemaal opnieuw geïnstalleerd op een VPS, virtuele machine of rechtstreeks op een zelf toegewijde machine.
- Directe toegang tot serverconsole of externe SSH-verbinding
- Een netwerkinterface die is geconfigureerd met een statisch IP-adres voor de machine
- Een geregistreerde openbare domeinnaam met A- en CNAME (www) DNS-records geconfigureerd aan de zijde van nameserver. In deze gids gebruiken we de linuxbox.cf als een voorbeelddomein. Het IP-adres van de server is geconfigureerd met een IP-adres dat behoort tot de privéruimte van C-klasse, NAT-ed in internet via de hoofdrouter. Het domein zal vanaf internet zichtbaar zijn via poort die de Apache 80- en 443-poorten van de hoofdrouter doorstuurt naar het IP-adres van de interne server.
Stap 1: Oorspronkelijke configuratie
Bij de eerste stap logt u in met root of met een gebruiker met rootprivileges in uw systeem en update Debian 9-componenten (kernel-upgrades, pakketupdates en beveiligingspatches) door de volgende opdrachten te geven.
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
Vervolgens zorgt u ervoor dat u een beschrijvende naam toevoegt voor de hostnaam van uw machine door de onderstaande opdracht uit te voeren. Vervolgens moet u het systeem opnieuw opstarten om de nieuwe hostnaam dienovereenkomstig toe te passen.
sudo hostnamectl set-hostnaam hostnaam.uwdomein.nl
sudo init 6
Vervolgens kunt u doorgaan met het installeren van hulpprogramma's voor net-tools wget, curl en bash-completion om ze later te kunnen gebruiken om eenvoudig uw Debian-server te beheren.
sudo apt installeren net-tools sudo wget curl bash-completion
Stap 2: installeer de Nginx Web Server
Nginx is een moderne en hulpbronnenefficiënte webserver die wordt gebruikt om webpagina's aan bezoekers op internet te tonen. Installeer de Nginx-webserver uit de officiële repositories van Debian 9 door het onderstaande commando uit te voeren op de console van uw server.
sudo apt-get install nginx
Zoals te zien is in de bovenstaande afbeelding, controleert de apt-pakketbeheerder aanvullende dependenties voor het pakket en vraagt u of u akkoord gaat om door te gaan met het installatieproces. Antwoord met ja (y) om Nginx te installeren.
Voer vervolgens uit netstat commando om netwerkaansluitingen op uw systeem weer te geven en te controleren of nginx daemon luistert op poort 80 / TCP. U kunt ook een probleem veroorzaken systemctl commando om de status van de nginx daemon te controleren zoals geïllustreerd in de onderstaande afbeelding.
sudo netstat -tlp
sudo netstat -tlpn
sudo systemctl status nginx.service
Zodra de nginx-server actief is in uw systeem, probleem ifconfig commando om informatie over netwerkinterfaces weer te geven en de IP-adressen van uw machine te vermelden. Open vervolgens een browser en bezoek Nginx standaardwebpagina via HTTP-protocol door het IP-adres toe te voegen aan uw browser. Het bericht "Wellcome to Nginx!" Moet in uw browservenster worden weergegeven.
or
Stap 3: activeer het HTTP / 2.0-protocol van Nginx
Standaard zijn de nieuwste releases van Nginx-binaire bestanden die door Debian 9-repositories worden geleverd, gebouwd met het HTTP / 2.0-protocol. HTTP / 2.0 is opgenomen in TSL / SSL-protocollen en kan de laadsnelheid van webpagina's via beveiligde transacties verbeteren.
Alle moderne browsers, zoals Chrome of Firefox, moeten dit protocol standaard ondersteunen. Houd er echter rekening mee dat Microsoft Internet Explorer en Microsoft Edge-browsers het HTTP2-protocol nog niet kunnen ontleden.
Om het HTTP / 2.0-protocol in Nginx op Debian 9 in te schakelen, moet u enkele wijzigingen aanbrengen in het standaardconfiguratiebestand van nginx of een nieuw configuratiebestand maken en het TLS-blok met code voor de 443-server toevoegen. Om dit te bereiken, maakt u eerst een back-up van de beschikbare standaardconfiguratie van Nginx-sites door het onderstaande commando uit te voeren. Bevestig dat de back-up is geslaagd door een lijst te maken met de inhoud van de site-beschikbare map.
sudo cp /etc/nginx/sites-available/default{,.backup}
ls / etc / nginx / sites beschikbaar /
Maak vervolgens het Nginx TLS-configuratiebestand met een teksteditor en voeg de volgende inhoud toe.
sudo nano /etc/nginx/sites-available/default.ssl
default-ssl bestandsuittreksel:
server { luister naar 443 ssl http2 default_server; luister [::]: 443 ssl http2 default_server; #server naam www.domein.tld; server naam _; root / var / www / html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; #SSL-certificaten ssl_certificate "/etc/nginx/ssl/cert.pem"; ssl_certificate_key "/etc/nginx/ssl/privekey.pem"; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache gedeeld: SSL: 1m; ssl_session_timeout 10m; ssl_ciphers HOOG:! aNULL:! MD5; ssl_prefer_server_ciphers aan; add_header Strict-Transport-Security "max-age = 31536000; #includeSubDomains "altijd; plaats / { index index.php index.html index.htm; try_files $ uri $ uri / /index.php ?$args $ uri / = 404; } stel $ cache_uri $ request_uri in; locatie ~ /.welbekend { sta alles toe; } locatie ~ .php $ { omvatten fragmenten / fastcgi-php.conf; # # # Met php-fpm (of andere unix-sockets): fastcgi_pass unix: /var/run/php/php7.0-fpm.sock; # # Met php-cgi (of andere TCP-aansluitingen): # fastcgi_pass 127.0.0.1: 9000; } # ontken de toegang tot. Htaccess-bestanden, als de documentwortel van Apache # komt overeen met die van nginx # #location ~ /.ht { # alles ontkennen; #} }
De instructie die het gebruik van het HTTP / 2.0-protocol mogelijk maakt, wordt vertegenwoordigd door het woord http2 uit de onderstaande regel.
luister naar 443 ssl http2 default_server;
Als de browser van uw bezoeker het HTTP2-protocol niet ondersteunt, verwijdert u de http2 woord van uw serverconfiguraties om het protocol uit te schakelen en de nginx-service opnieuw te starten om wijzigingen toe te passen.
Als u een geregistreerd domein heeft of als u virtuele hosting gebruikt op basis van IP-adressen, moet u uw domeinnaam of IP-adres toevoegen na de server naam richtlijn zoals getoond in het onderstaande voorbeeld.
server naam www.linuxbox.cf linuxbox.cf;
Als u klaar bent met het bewerken van het standaard configuratiebestand van Nginx met de bovenstaande instellingen
In het bovenstaande nginx TSL-configuratiebestand hebben we het pad voor het TLS-certificaat en de sleutel opgegeven. Omdat we de sleutels nog niet in uw systeem hebben geïnstalleerd, voert u de volgende opdracht uit om het zelfondertekende SSL-certificaatbestand en de sleutel te genereren. Tijdens het genereren van het SSL-certificaat zou u een reeks vragen worden gesteld. Voeg de tweeletterige code toe voor uw land, de staat of provincie, de naam van uw stad, de naam van uw organisatie, de eenheidsnaam van uw organisatie, de algemene naam van uw server en een geldig e-mailadres. Je moet opletten Gemeenschappelijke naam zo ingesteld dat deze overeenkomt met de FQDN-record van uw machine van de DNS-server of uw server-IP-adres dat wordt gebruikt voor toegang tot de webpagina. Het certificaat en de sleutel worden opgeslagen in een nieuwe map onder de nginx-map, genaamd ssl, zoals weergegeven in de onderstaande schermafbeelding.
sudo mkdir / etc / nginx / ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls / etc / nginx / ssl /
Genereer ook een nieuwe sterke Diffie-Hellman-codering, die u kunt vinden in het bovenstaande configuratiebestand ssl_dhparam regel, door het onderstaande commando uit te geven:
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
Nadat u de Diffie-Hellman-sleutel hebt gegenereerd, activeert u ten slotte het TLS-configuratiebestand door een symbolische koppeling voor te maken defult-ssl configuratiebestand van -sites-available map naar -sites-enabled map door de volgende opdracht uit te voeren.
ln -s / etc / nginx / sites-available / default-ssl / etc / nginx / sites-enabled /
Test vervolgens het Nginx-configuratiebestand op syntaxisfouten en start, als alles in orde is, de Nginx-daemon opnieuw om alle wijzigingen toe te passen door de onderstaande opdrachten uit te voeren.
sudo nginx -t
sudo systemctl restart nginx.service opnieuw
Om te controleren of de Nginx-webserver SSL-poort bindt, geeft u de opdracht netstat uit en controleert u of poort 443 wordt weergegeven in luistermodus.
netstat -tlpn | grep nginx
Het onderstaande screenshot illustreerde de bovenstaande stappen.
Navigeer vervolgens vanuit een browser naar uw domeinnaam of het IP-adres van uw server via HTTP-protocol om de standaardpagina van nginx weer te geven. Omdat u zelfondertekende certificaten gebruikt, moet er een foutmelding in uw browser worden weergegeven. Bevestig de fout om door te gaan naar de standaardhoofdpagina van nginx.
In het geval dat Nginx geen standaard geeft index.html pagina in webroot-map, geeft u de volgende opdracht om de indexpagina te maken.
echo "testpagina" | tee /var/www/html/index.html
Om de aanwezigheid van het door Nginx geadverteerde HTTP / 2.0-protocol te bevestigen, geeft u het onderstaande commando. Zoeken h2 woord in protocollen geadverteerd door de server.
openssl s_client -connect localhost: 443 -nextprotoneg ”
U kunt ook de status van de verbinding visualiseren en controleren of het HTTP2-protocol wordt geadverteerd door Nginx vanuit de Chrome-browser door op de F12-functietoets te drukken en de pagina aan te vragen. Om het protocol te tonen dat door het verzoek wordt gebruikt, gaat u naar het tabblad Netwerk, klikt u met de rechtermuisknop op Type en vinkt u Protocol aan. HTTP2-protocol moet worden weergegeven als h2 in de huidige protocolkolom, zoals geïllustreerd in de onderstaande schermafbeelding.
Stap 4: installeer PHP7.0
Nginx-webserver kan dynamische webinhoud aanbieden met behulp van PHP-programmeertaalinterpreter via PHP FastCGI procesmanager waarnaar Nginx de verwerkingsverzoeken doorgeeft. FastCGI procesmanager kan worden verkregen door de php-FPM voorgecompileerd pakket aangeboden door officiële repositories van Debian 9.
Om php-fpm procesmanager en PHP7.0-interpreter in het systeem te installeren, samen met de aanvullende pakketten die PHP toestaan om te communiceren met Nginx webserver, voert u de onderstaande opdracht uit op uw serverconsole:
sudo apt install php7.0 php7.0-fpm php7.0-curl php7.0-gd
Nadat de PHP7.0-interpreter met succes in uw systeem is geïnstalleerd, start en controleer u de php7.0-fpm-daemon door het onderstaande commando uit te voeren:
sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm
In het bovenstaande TLS-configuratiebestand van Nginx hebben we de blokconfiguraties voor PHP FastCGI-procesbeheer al toegevoegd om dynamische inhoud te kunnen aanbieden. Het codeblok waarmee Nginx PHP-interpreter kan gebruiken, wordt weergegeven in het onderstaande fragment, dus er zijn geen verdere stappen nodig om het Nginx TSL-configuratiebestand te wijzigen. Het hashtag # -teken vanaf het begin van de regels in het screenshot hieronder zijn opmerkingen. Commentaarregels van configuratiebestanden worden standaard genegeerd door de Nginx-webserver.
locatie ~ .php $ {include snippets / fastcgi-php.conf; fastcgi_pass unix: /run/php/php7.0-fpm.sock; }
Om te testen en te valideren of Nginx php-bestanden correct kan doorsturen naar een PHP-processor, maakt u een PHP info.php test configuratiebestand door het onderstaande commando uit te voeren
sudo su -c 'echo' "> /Var/www/html/info.php '
Ga vervolgens naar de php-infopagina in uw webbrowser door te navigeren naar de domeinnaam of het openbare IP-adres van uw server gevolgd door /info.php zoals getoond in de onderstaande afbeelding.
https://www.linuxbox.cf/info.php
or
U kunt ook controleren of het HTTP / 2.0-protocol wordt geadverteerd door de server door de lijn te zoeken $ _SERVER [ 'SERVER_PROTOCOL'] op PHP-variabelen.
Om andere PHP7.0-modules te installeren, voert u de apt zoeken php7.0 commando om een specifieke PHP-module te vinden en te installeren. Als je van plan bent om een Content Management Systeem, zoals Wordpress, bovenop je LEMP-stack te installeren, geef dan het volgende commando om wat extra PHP-modules te installeren.
sudo apt php7.0-mcrypt php7.0-mbstring installeren
De nieuw geïnstalleerde PHP-modules zijn echter niet standaard ingeschakeld op uw systeem. Om een nieuwe geïnstalleerde PHP-module voor Nginx te activeren, moet je de PHP-FPM-service opnieuw opstarten door de onderstaande opdracht uit te voeren.
sudo systemctl restart php7.0-fpm.service
Stap 5: MariaDB-database installeren
Eindelijk ontbreekt het laatste stukje van de LAMP-stapelpuzzel in de database. De LEMP-component van de MariaDB-database wordt gebruikt voor het opslaan van records in tabellen en kolommen en voor het dynamisch beheren van de gegevens van een webtoepassing. Om het MariaDB databasebeheersysteem in Debian 9 met de vereiste PHP-module te installeren om vanuit PHP-bestanden toegang te krijgen tot de database, geeft u het onderstaande commando uit in de console van uw server. Start daarna de PHP-FPM-daemon opnieuw om de PHP MySQL-module te activeren die nodig is om toegang te krijgen tot de database.
sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service
Standaard kunnen de systeemhoofdaccount of gebruikers met rootprivileges toegang krijgen tot de database zonder een wachtwoord op te geven. Om dit gedrag te veranderen, zodat MySQL elke keer dat een systeemgebruiker toegang probeert te krijgen tot de database om een wachtwoord vraagt, meldt u zich aan vanuit de opdrachtregelinterface in de MySQL-database met rootprivileges en voert u de volgende opdrachten in de MySQL-console uit:
sudo mysql
MariaDB> gebruik mysql; MariaDB> update user set plugin = '' where User = 'root'; MariaDB> flush-privileges; MariaDB> afsluiten
Zorg er bij de volgende stap voor dat u MariaDB beveiligt door het beveiligingsscript uit te voeren mysql_secure_installation geleverd door het installatiepakket van Debian stretch repositories. Tijdens het uitvoeren van het script zal een reeks vragen worden gesteld om de MariaDB-database te beveiligen, zoals: wijzigen van het MySQL-rootwachtwoord, verwijderen van anonieme gebruikers, uitschakelen van root-logins en verwijderen van de testdatabase. Voer het script uit door het onderstaande commando uit te voeren en zeg ja tegen alle gestelde vragen om de MySQL-daemon volledig te beveiligen. Gebruik de onderstaande scriptuitvoer behalve als een leidraad.
sudo mysql_secure_installation
OPMERKING: ALLE ONDERDELEN VAN DEZE SCRIPT GEBRUIKEN WORDEN AANBEVOLEN VOOR ALLE MariaDB
SERVERS IN PRODUCTIEGEBRUIK! LEES ELK STAP AANDACHTIG DOOR!
Om in te loggen bij MariaDB om het te beveiligen, hebben we de huidige versie nodig
wachtwoord voor de root-gebruiker. Als u zojuist MariaDB hebt geïnstalleerd, en
je hebt nog geen root-wachtwoord ingesteld, het wachtwoord is leeg
dus je moet gewoon op enter drukken.
Voer huidig wachtwoord voor root in (voer voor geen enkel in):
OK, succesvol gebruikt wachtwoord, verder gaan ...
Het instellen van het root-wachtwoord zorgt ervoor dat niemand kan inloggen op de MariaDB
rootgebruiker zonder de juiste autorisatie.
Je hebt al een rootwachtwoord ingesteld, dus je kunt veilig 'n' beantwoorden.
Verander het root-wachtwoord? [Y / n] y
Nieuw paswoord:
Voer nieuw wachtwoord opnieuw in:
Wachtwoord succesvol bijgewerkt!
Herlaad voorrecht tabellen ..
... Succes!
Standaard heeft een MariaDB-installatie een anonieme gebruiker die iedereen toestaat
om in te loggen op MariaDB zonder dat er een gebruikersaccount voor is aangemaakt
hen. Dit is alleen bedoeld voor testen en om de installatie uit te voeren
ga een beetje gladder. Je moet ze verwijderen voordat je naar een
productieomgeving.
Anonieme gebruikers verwijderen? [Y / n] y
... Succes!
Normaal gesproken moet root alleen toestemming krijgen om verbinding te maken vanuit 'localhost'. Deze
zorgt ervoor dat iemand niet kan raden naar het root-wachtwoord van het netwerk.
Geen root login op afstand toestaan? [Y / n] y
... Succes!
MariaDB wordt standaard geleverd met een database met de naam 'test' die iedereen kan gebruiken
toegang. Dit is ook alleen bedoeld voor testen en moet worden verwijderd
voordat u naar een productieomgeving gaat.
Testdatabase verwijderen en er toegang toe hebben? [Y / n] y
- Testdatabase laten vallen ...
... Succes!
- Verwijdering van rechten op testdatabase ...
... Succes!
Het opnieuw laden van de privilege-tabellen zorgt ervoor dat alle wijzigingen die tot nu toe zijn doorgevoerd
wordt onmiddellijk van kracht.
Reload-tabellen opnieuw laden nu? [Y / n] y
... Succes!
Schoonmaken…
Helemaal klaar! Als je alle bovenstaande stappen hebt voltooid, kun je je MariaDB gebruiken
installatie moet nu veilig zijn.
Bedankt voor het gebruiken van MariaDB!
Tot slot, om de MariaDB-functionaliteit te testen, logt u vanuit console in op de database en voert u de volgende opdracht uit. Een lijst met standaard databases moet worden weergegeven in de MariaDB-console. Verlaat de MariaDB-console met afrit verklaring.
mysql -u root -p
MariaDB [(geen)]> toon databases; + -------------------- + | Database | + -------------------- + | informatie_schema | | mysql | | performance_schema | + -------------------- + 3 rijen in set (0.00 sec) MariaDB [(geen)]> exit
Dat alles! Nginx-webserver, MariaDB-database en PHP-programmeertaal zijn geïnstalleerd op uw Debian 9-machine. U kunt nu beginnen met het bouwen van dynamische websites of webapplicaties voor uw bezoekers.