Zoeken op website

Hoe Nginx, MariaDB 10, PHP 7 (LEMP Stack) te installeren in 16.10/16.04


De LEMP-stack is een acroniem dat staat voor een groep pakketten (Linux OS, Nginx-webserver, MySQL\MariaDB-database en PHP-server-side dynamische programmeertaal) die worden gebruikt om dynamische webapplicaties te implementeren en webpagina's.

In deze tutorial wordt uitgelegd hoe u een LEMP-stack installeert met MariaDB 10, PHP 7 en HTTP 2.0 ondersteuning voor Nginx op Ubuntu 16.10 en Ubuntu 16.04 server-/desktopversies.

Vereisten

  1. Installatie van Ubuntu 16.04 Server Edition [instructies werken ook op Ubuntu 16.10]

Stap 1: Installeer de Nginx-webserver

1. Nginx is een moderne en hulpbronnenefficiënte webserver die wordt gebruikt om webpagina's weer te geven aan bezoekers op internet. We beginnen met het installeren van de Nginx-webserver vanuit officiële Ubuntu-repository's met behulp van de apt-opdrachtregel.

sudo apt-get install nginx

2. Voer vervolgens de opdrachten netstat en systemctl uit om te bevestigen of Nginx is gestart en bindt op poort 80.

netstat -tlpn

sudo systemctl status nginx.service

Zodra u de bevestiging heeft dat de server is gestart, kunt u een browser openen en naar het IP-adres van uw server of DNS-record navigeren met behulp van het HTTP-protocol om de standaardwebpagina van Nginx te bezoeken.

http://IP-Address

Stap 2: Schakel het Nginx HTTP/2.0-protocol in

3. Het HTTP/2.0-protocol dat standaard is gebouwd in de nieuwste versie van Nginx binaire bestanden op Ubuntu 16.04 werkt alleen in combinatie met SSL en belooft een enorme snelheidsverbetering bij het laden van SSL-webpagina's.

Om het protocol in Nginx op Ubuntu 16.04 in te schakelen, navigeert u eerst naar de configuratiebestanden van de beschikbare Nginx-sites en maakt u een back-up van het standaardconfiguratiebestand door de onderstaande opdracht te geven.

cd /etc/nginx/sites-available/
sudo mv default default.backup

4. Maak vervolgens met behulp van een teksteditor een nieuwe standaardpagina met de onderstaande instructies:

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

        location / {
                try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

Het bovenstaande configuratiefragment maakt het gebruik van HTTP/2.0 mogelijk door de parameter http2 toe te voegen aan alle SSL-luisterrichtlijnen.

Ook wordt het laatste deel van het fragment ingesloten in de serverrichtlijn gebruikt om al het niet-SSL-verkeer om te leiden naar de SSL/TLS-standaardhost. Vervang ook de instructie servernaam zodat deze overeenkomt met uw eigen IP-adres of DNS-record (bij voorkeur FQDN).

5. Zodra u klaar bent met het bewerken van het standaardconfiguratiebestand van Nginx met de bovenstaande instellingen, genereert en vermeldt u het SSL-certificaatbestand en de sleutel door de onderstaande opdrachten uit te voeren.

Vul het certificaat met uw eigen aangepaste instellingen en let op de Common Name-instelling, zodat deze overeenkomt met uw DNS FQDN-record of het IP-adres van uw server dat wordt gebruikt om toegang te krijgen tot de webpagina.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
ls /etc/nginx/ssl/

6. Maak ook een sterke DH-codering, die is gewijzigd in het bovenstaande configuratiebestand op de ssl_dhparam-instructieregel, door het onderstaande commando uit te voeren:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

7. Nadat de Diffie-Hellman-sleutel is gemaakt, controleert u of het Nginx-configuratiebestand correct is geschreven en kan worden toegepast door de Nginx-webserver en start u de daemon opnieuw om de wijzigingen weer te geven door de onderstaande opdrachten uit te voeren.

sudo nginx -t
sudo systemctl restart nginx.service

8. Om te testen of Nginx het HTTP/2.0-protocol gebruikt, voert u het onderstaande commando uit. De aanwezigheid van het door h2 geadverteerde protocol bevestigt dat Nginx met succes is geconfigureerd om het HTTP/2.0-protocol te gebruiken. Alle moderne, up-to-date browsers zouden dit protocol standaard moeten ondersteunen.

openssl s_client -connect localhost:443 -nextprotoneg ''

Stap 3: Installeer PHP 7-interpreter

Nginx kan worden gebruikt met de PHP-taalinterpreter voor dynamische verwerking om dynamische webinhoud te genereren met behulp van FastCGI-procesmanager, verkregen door het installeren van het binaire pakket php-fpm uit de officiële Ubuntu-repository's.

9. Om PHP7.0 en de aanvullende pakketten waarmee PHP kan communiceren met de Nginx-webserver te pakken te krijgen, voert u de onderstaande opdracht uit op uw serverconsole:

sudo apt install php7.0 php7.0-fpm 

10. Zodra de PHP7.0-interpreter met succes op uw computer is geïnstalleerd, start en controleert u de php7.0-fpm-daemon door het onderstaande uit te voeren commando:

sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm

11. Het huidige configuratiebestand van Nginx is al geconfigureerd om PHP FastCGI procesmanager te gebruiken om dynamische inhoud te serveren.

Het serverblok waarmee Nginx de PHP-interpreter kan gebruiken, wordt weergegeven in het onderstaande fragment, dus er zijn geen verdere wijzigingen van het standaard Nginx-configuratiebestand vereist.

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

Hieronder ziet u een screenshot van de instructies die u moet verwijderen en wijzigen in het geval van een origineel Nginx-standaardconfiguratiebestand.

12. Om de Nginx-webserverrelatie met PHP FastCGI procesmanager te testen, maakt u een PHP info.php testconfiguratiebestand door de onderstaande opdracht uit te voeren en verifieert u de instellingen door dit configuratiebestand te bezoeken met behulp van het onderstaande adres: http://IP_of domein/info.php.

sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'

Controleer ook of het HTTP/2.0-protocol door de server wordt geadverteerd door de regel $_SERVER[‘SERVER_PROTOCOL’] in het PHP-variabelenblok te lokaliseren, zoals geïllustreerd in de onderstaande schermafbeelding.

13. Om extra PHP7.0 modules te installeren, gebruikt u de opdracht apt search php7.0 om een PHP-module te zoeken en te installeren.

Probeer ook de volgende PHP-modules te installeren. Deze kunnen van pas komen als u van plan bent WordPress of een ander CMS te installeren.

sudo apt install php7.0-mcrypt php7.0-mbstring

14. Om de extra PHP-modules te registreren, start u de PHP-FPM-daemon opnieuw op door het onderstaande commando te geven.

sudo systemctl restart php7.0-fpm.service

Stap 4: Installeer de MariaDB-database

15. Ten slotte hebben we, om onze LEMP-stack te voltooien, de MariaDB-databasecomponent nodig om websitegegevens op te slaan en te beheren.

Installeer het MariaDB databasebeheersysteem door de onderstaande opdracht uit te voeren en start de PHP-FPM-service opnieuw om de MySQL-module te gebruiken om toegang te krijgen tot de database.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

16. Om de MariaDB-installatie te beveiligen, voert u het beveiligingsscript uit dat wordt geleverd door het binaire pakket uit Ubuntu-repository's, waarin u wordt gevraagd een root-wachtwoord in te stellen, anonieme gebruikers te verwijderen, root-login op afstand uit te schakelen en de testdatabase te verwijderen.

Voer het script uit door het onderstaande commando uit te voeren en beantwoord alle vragen met yes. Gebruik de onderstaande schermafbeelding als richtlijn.

sudo mysql_secure_installation

17. Om MariaDB zo te configureren dat gewone gebruikers toegang hebben tot de database zonder sudo systeemrechten, gaat u naar de MySQL-opdrachtregelinterface met rootrechten en voert u de onderstaande opdrachten uit op de MySQL-interpreter:

sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

Log ten slotte in op de MariaDB-database en voer een willekeurige opdracht uit zonder rootrechten door de onderstaande opdracht uit te voeren:

mysql -u root -p -e 'show databases'

Dat alles! Nu heb je een LEMP-stack geconfigureerd op Ubuntu 16.10 en Ubuntu 16.04-server waarmee je complexe dynamische webapplicaties kunt implementeren die kunnen communiceren met databases.