Ricerca nel sito web

Come installare Nginx, MariaDB 10, PHP 7 (stack LEMP) nella versione 16.10/16.04


Lo stack LEMP è un acronimo che rappresenta un gruppo di pacchetti (sistema operativo Linux, server web Nginx, database MySQL\MariaDB e linguaggio di programmazione dinamica lato server PHP) utilizzati per distribuire applicazioni web dinamiche e pagine web.

Questo tutorial ti guiderà su come installare uno stack LEMP con MariaDB 10, PHP 7 e HTTP 2.0 supporto per Nginx sulle edizioni server/desktop Ubuntu 16.10 e Ubuntu 16.04.

Requisiti

  1. Installazione di Ubuntu 16.04 Server Edition [le istruzioni funzionano anche su Ubuntu 16.10]

Passaggio 1: installare il server Web Nginx

1. Nginx è un server Web moderno ed efficiente in termini di risorse utilizzato per visualizzare pagine Web ai visitatori su Internet. Inizieremo installando il server web Nginx dai repository ufficiali di Ubuntu utilizzando la riga di comando apt.

sudo apt-get install nginx

2. Successivamente, esegui i comandi netstat e systemctl per confermare se Nginx è avviato e si collega alla porta 80.

netstat -tlpn

sudo systemctl status nginx.service

Una volta ottenuta la conferma che il server è avviato, puoi aprire un browser e navigare verso l'indirizzo IP del tuo server o il record DNS utilizzando il protocollo HTTP per visitare la pagina Web predefinita di Nginx.

http://IP-Address

Passaggio 2: attiva il protocollo Nginx HTTP/2.0

3. Il protocollo HTTP/2.0 creato per impostazione predefinita nell'ultima versione dei binari Nginx su Ubuntu 16.04 funziona solo insieme a SSL e promette un enorme miglioramento della velocità nel caricamento delle pagine Web SSL.

Per abilitare il protocollo in Nginx su Ubuntu 16.04, accedi innanzitutto ai file di configurazione dei siti disponibili di Nginx ed esegui il backup del file di configurazione predefinito emettendo il comando seguente.

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

4. Quindi, utilizzando un editor di testo, crea una nuova pagina predefinita con le istruzioni seguenti:

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;
}

Lo snippet di configurazione riportato sopra abilita l'uso di HTTP/2.0 aggiungendo il parametro http2 a tutte le direttive di ascolto SSL.

Inoltre, l'ultima parte dell'estratto racchiuso nella direttiva server viene utilizzata per reindirizzare tutto il traffico non SSL all'host predefinito SSL/TLS. Inoltre, sostituisci la direttiva server_name in modo che corrisponda al tuo indirizzo IP o record DNS (preferibilmente FQDN).

5. Una volta terminata la modifica del file di configurazione predefinito di Nginx con le impostazioni di cui sopra, genera ed elenca il file e la chiave del certificato SSL eseguendo i comandi seguenti.

Compila il certificato con le tue impostazioni personalizzate e presta attenzione all'impostazione del Nome comune in modo che corrisponda al tuo record DNS FQDN o all'indirizzo IP del tuo server che verrà utilizzato per accedere alla pagina web.

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. Inoltre, crea un potente cifra DH, che è stato modificato nel file di configurazione sopra sulla riga di istruzioni ssl_dhparam, emettendo il comando seguente:

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

7. Una volta creata la chiave Diffie-Hellman, verificare se il file di configurazione Nginx è scritto correttamente e può essere applicato dal server Web Nginx e riavviare il demone per riflettere le modifiche eseguendo i comandi seguenti.

sudo nginx -t
sudo systemctl restart nginx.service

8. Per verificare se Nginx utilizza il protocollo HTTP/2.0, esegui il comando seguente. La presenza del protocollo pubblicizzato h2 conferma che Nginx è stato configurato con successo per utilizzare il protocollo HTTP/2.0. Tutti i browser moderni e aggiornati dovrebbero supportare questo protocollo per impostazione predefinita.

openssl s_client -connect localhost:443 -nextprotoneg ''

Passaggio 3: installa l'interprete PHP 7

Nginx può essere utilizzato con l'interprete del linguaggio di elaborazione dinamica PHP per generare contenuti web dinamici con l'aiuto del gestore dei processi FastCGI ottenuto installando il pacchetto binario php-fpm dai repository ufficiali di Ubuntu.

9. Per ottenere PHP7.0 e i pacchetti aggiuntivi che consentiranno a PHP di comunicare con il server web Nginx, esegui il comando seguente sulla console del tuo server:

sudo apt install php7.0 php7.0-fpm 

10. Una volta che l'interprete PHP7.0 è stato installato con successo sul tuo computer, avvia e controlla il demone php7.0-fpm immettendo il comando seguente comando:

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

11. Il file di configurazione corrente di Nginx è già configurato per utilizzare il gestore processi PHP FastCGI per server di contenuti dinamici.

Il blocco del server che consente a Nginx di utilizzare l'interprete PHP è presentato nell'estratto seguente, quindi non sono necessarie ulteriori modifiche al file di configurazione Nginx predefinito.

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

Di seguito è riportato uno screenshot delle istruzioni necessarie per rimuovere i commenti e modificare nel caso di un file di configurazione predefinito di Nginx originale.

12. Per testare la relazione del server web Nginx con il gestore processi PHP FastCGI, crea un file di configurazione di prova PHP info.php emettendo il comando seguente e verifica le impostazioni visitando questo file di configurazione utilizzando l'indirizzo seguente: http://IP_o dominio/info.php.

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

Controlla anche se il protocollo HTTP/2.0 è pubblicizzato dal server individuando la riga $_SERVER['SERVER_PROTOCOL'] sul blocco Variabili PHP come illustrato nello screenshot seguente.

13. Per installare moduli PHP7.0 aggiuntivi utilizzare il comando apt search php7.0 per trovare un modulo PHP e installarlo.

Inoltre, prova a installare i seguenti moduli PHP che possono tornare utili nel caso tu stia pianificando di installare WordPress o altri CMS.

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

14. Per registrare i moduli extra PHP è sufficiente riavviare il demone PHP-FPM immettendo il comando seguente.

sudo systemctl restart php7.0-fpm.service

Passaggio 4: installa il database MariaDB

15. Infine, per completare il nostro stack LEMP abbiamo bisogno del componente database MariaDB per archiviare e gestire i dati del sito web.

Installa il sistema di gestione del database MariaDB eseguendo il comando seguente e riavvia il servizio PHP-FPM per utilizzare il modulo MySQL per accedere al database.

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

16. Per proteggere l'installazione di MariaDB, esegui lo script di sicurezza fornito dal pacchetto binario dai repository di Ubuntu che ti chiederà di impostare una password di root, rimuovere utenti anonimi, disabilitare l'accesso root da remoto e rimuovere il database di test.

Esegui lo script immettendo il comando seguente e rispondi a tutte le domande con yes. Utilizza lo screenshot seguente come guida.

sudo mysql_secure_installation

17. Per configurare MariaDB in modo che gli utenti ordinari possano accedere al database senza privilegi di sistema sudo, vai all'interfaccia della riga di comando MySQL con privilegi di root ed esegui i seguenti comandi sull'interprete MySQL:

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

Infine, accedi al database MariaDB ed esegui un comando arbitrario senza privilegi di root eseguendo il comando seguente:

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

Questo è tutto! Ora disponi di uno stack LEMP configurato sui server Ubuntu 16.10 e Ubuntu 16.04 che ti consente di distribuire applicazioni Web dinamiche complesse in grado di interagire con i database.