GNU/Linux >> Linux Esercitazione >  >> Debian

Installa Nginx con PHP e MySQL (LEMP) più SSL su Debian 10

LEMP è un acronimo che sta per il seguente stack software:Linux kernel, Nginx server web, MariaDB database (o MySQL ), e il PHP linguaggio di programmazione lato server. Questo software è oggi ampiamente utilizzato sui server su Internet per fornire siti Web dinamici o applicazioni Web interattive.

Nginx è un server Web moderno ed efficiente in termini di risorse, sviluppato attivamente ed è il secondo server Web più utilizzato su Internet dopo il server HTTP Apache. È particolarmente veloce perché utilizza un approccio asincrono basato sugli eventi per elaborare le richieste.

Questo tutorial mostra come installare e configurare lo stack LEMP (Nginx con MariaDB e PHP 7) sull'ultima versione di Debian 10.

REQUISITI

  • L'ultima versione del sistema operativo Debian 10, che può essere ottenuta dal seguente link https://www.debian.org/CD/http-ftp/, installata da zero su VPS, macchina virtuale o direttamente su una macchina autodedicata.
  • Accesso diretto alla console del server o una connessione SSH remota.
  • Un'interfaccia di rete configurata con un indirizzo IP statico per la macchina
  • Un nome di dominio pubblico registrato con record DNS A e CNAME (www) configurati sul lato server dei nomi. In questa guida, utilizziamo il dominio example.com come esempio.

Fase 1:configurazione iniziale

Il primo passo è accedere con root o con un utente con privilegi di root nel sistema e aggiornare i componenti di Debian 10 (aggiornamenti del kernel, aggiornamenti dei pacchetti e patch di sicurezza) eseguendo i seguenti comandi.

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Successivamente, assicurati di aggiungere un nome descrittivo per il nome host della tua macchina eseguendo il comando seguente. Successivamente, dovresti riavviare il sistema per applicare il nuovo nome host di conseguenza.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Quindi, vai avanti e installa le utility net-tools wget, curl e bash-completion per usarle in seguito per amministrare facilmente il tuo server Debian.

sudo apt install net-tools sudo wget curl bash-completion

Fase 2:installa il server Web Nginx

Nginx è un server Web moderno ed efficiente in termini di risorse utilizzato per visualizzare pagine Web ai visitatori su Internet. Installa il server web Nginx dal repository Debian 10 eseguendo il comando seguente nella console del tuo server.

sudo apt-get install nginx

Come mostrato nell'immagine sopra, il gestore di pacchetti apt verificherà le dipendenze aggiuntive per il pacchetto e ti chiederà se accetti di continuare con il processo di installazione. Rispondi con sì (y ) per installare Nginx.

Quindi, esegui netstat comando per visualizzare i socket di rete sul tuo sistema e verificare se il demone nginx è in ascolto sulla porta 80/TCP. In alternativa, potresti voler emettere systemctl comando per controllare lo stato del demone nginx come illustrato nell'immagine sottostante.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

Una volta che il server nginx è attivo e funzionante nel tuo sistema, emetti ifconfig comando per visualizzare le informazioni sulle interfacce di rete ed elencare gli indirizzi IP della macchina. Quindi, apri un browser e visita la pagina Web predefinita di Nginx tramite il protocollo HTTP aggiungendo l'indirizzo IP nel tuo browser. Il messaggio "Benvenuto a Nginx!" dovrebbe essere visualizzato nella finestra del browser.

http://www.example.com

o

http://192.168.0.100

Fase 3:attiva il protocollo Nginx HTTP/2.0

Per impostazione predefinita, le ultime versioni dei binari Nginx fornite dai repository Debian 10 sono costruite con il protocollo HTTP/2.0. HTTP/2.0 è integrato con i protocolli TSL/SSL e può migliorare la velocità di caricamento delle pagine Web tramite transazioni protette.

Tutti i browser moderni, come Chrome o Firefox, dovrebbero supportare questo protocollo per impostazione predefinita. Tuttavia, tieni presente che i browser Microsoft Internet Explorer e Microsoft Edge non possono ancora analizzare il protocollo http2.

Per abilitare il protocollo HTTP/2.0 in Nginx su Debian 10, è necessario apportare alcune modifiche al file di configurazione Nginx predefinito o creare un nuovo file di configurazione e aggiungere il blocco di codice TLS per 443 server. Per fare ciò, crea prima un backup della configurazione predefinita dei siti Nginx eseguendo il comando seguente. Conferma che il backup è stato eseguito correttamente elencando il contenuto della directory dei siti disponibili.

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Quindi, crea un file di configurazione Nginx TLS utilizzando un editor di testo e aggiungi il seguente contenuto.

sudo nano /etc/nginx/sites-available/default-ssl

ssl predefinito estratto del file:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                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 shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

L'istruzione che consente l'utilizzo del protocollo HTTP/2.0 è rappresentata dalla parola http2 dalla riga sottostante.

 listen 443 ssl http2 default_server;

Nel caso in cui i browser dei tuoi visitatori non supportino il protocollo HTTP2, rimuovi http2 word dalle configurazioni del tuo server per disabilitare il protocollo e riavviare il servizio nginx per applicare le modifiche.

Nel caso in cui tu abbia un dominio registrato o utilizzi un hosting virtuale basato su indirizzi IP dovresti aggiungere il tuo nome di dominio o indirizzo IP dopo il nome_server direttiva come mostrato nell'esempio seguente.

server_name www.example.com example.com;

Una volta terminata la modifica del file di configurazione predefinito di Nginx con le impostazioni precedenti

Configura SSL in Nginx

Nel file di configurazione TSL di nginx sopra, abbiamo specificato il percorso per il certificato e la chiave TLS. Poiché non abbiamo ancora installato le chiavi nel tuo sistema, inserisci il seguente comando per generare il file e la chiave del certificato SSL autofirmati. Durante la generazione del certificato SSL, ti verranno poste una serie di domande. Inserisci il codice a due cifre per il tuo paese, stato o provincia, il nome della tua città, il nome della tua organizzazione, il nome dell'unità della tua organizzazione, il nome comune del tuo server e un indirizzo email valido. Dovresti assicurarti di impostare il nome comune in modo che corrisponda al record FQDN del tuo computer dal server DNS o all'indirizzo IP del tuo server utilizzato per accedere al sito web. Il certificato e la chiave sono archiviati in una nuova directory nella directory nginx denominata ssl, come mostrato nella schermata seguente.

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/

Inoltre, genera un nuovo forte codice Diffie-Hellman, che può essere trovato nel file di configurazione sopra su ssl_dhparam riga di istruzione, eseguendo il comando seguente:

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

Infine, dopo aver generato la chiave Diffie-Hellman, attiva il file di configurazione TLS creando un collegamento simbolico per default-ssl file di configurazione da siti-disponibili directory su siti abilitati directory eseguendo il comando seguente.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Quindi, verifica la presenza di errori di sintassi nel file di configurazione di Nginx e, se tutto è a posto, riavvia il demone Nginx per applicare tutte le modifiche eseguendo i comandi seguenti.

sudo nginx -t
sudo systemctl restart nginx.service

Verifica se la configurazione SSL è riuscita

Per confermare se il server web Nginx è vincolante sulla porta SSL, emetti il ​​comando netstat e controlla se la porta 443 è visualizzata in modalità di ascolto.

netstat -tlpn | grep nginx

Lo screenshot qui sotto illustra i passaggi precedenti.

Quindi, vai al tuo nome di dominio o all'indirizzo IP del tuo server tramite il protocollo HTTP da un browser per visualizzare la pagina predefinita di nginx. Poiché stai utilizzando certificati autofirmati, nel tuo browser dovrebbe essere visualizzato un errore. Conferma l'errore per passare alla pagina principale di default di nginx.

Nel caso in cui Nginx non fornisca un index.html predefinito page nella directory webroot, immetti il ​​seguente comando per creare la pagina dell'indice.

echo "test page" | tee /var/www/html/index.html

Per confermare la presenza del protocollo HTTP/2.0 pubblicizzato da Nginx, emettere il comando seguente. Cerca h2 word nei protocolli pubblicizzati dal server.

 openssl s_client -connect localhost:443 -nextprotoneg ''

È inoltre possibile visualizzare lo stato della connessione e verificare se il protocollo http2 è pubblicizzato da Nginx dal browser Chrome premendo il tasto funzione F12 e richiedere la pagina. Per visualizzare il protocollo utilizzato dalla richiesta, andare nella scheda Rete, fare clic con il tasto destro del mouse sul menu Tipo e selezionare Protocollo archiviato. Il protocollo HTTP2 dovrebbe essere visualizzato come h2 nella colonna del protocollo corrente, come illustrato nella schermata seguente.

Fase 4:installa PHP 7

Il server Web Nginx può servire contenuti Web dinamici con l'aiuto dell'interprete del linguaggio di programmazione PHP tramite il gestore di processi PHP FastCGI a cui Nginx passa le richieste di elaborazione. FastCGI process manager può essere ottenuto installando il php-fpm pacchetto precompilato offerto dai repository ufficiali di Debian 9.

Per installare il gestore di processo php-fpm e l'interprete PHP7.0 nel sistema insieme ai pacchetti aggiuntivi che consentiranno a PHP di comunicare con il server web Nginx, emetti il ​​comando seguente sulla console del tuo server:

sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd

Avvia PHP-FPM

Una volta che l'interprete PHP 7.3 è stato installato correttamente sul tuo sistema, avvia e controlla il demone php7.3-fpm eseguendo il comando seguente:

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

Nel file di configurazione TLS di Nginx sopra, abbiamo già aggiunto le configurazioni dei blocchi per PHP FastCGI process manager al fine di servire contenuto dinamico. Il blocco di codice che consente a Nginx di utilizzare l'interprete PHP è mostrato nell'estratto seguente, quindi non sono necessari ulteriori passaggi per modificare il file di configurazione TSL di Nginx. L'hashtag # segno dall'inizio delle righe nello screenshot qui sotto sono commenti. Le righe commentate dai file di configurazione vengono ignorate per impostazione predefinita dal server web Nginx.

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

Test configurazione PHP

Per testare e convalidare se Nginx può passare correttamente i file php al processore PHP, crea un PHP info.php testare il file di configurazione eseguendo il comando seguente

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

Quindi, visita la pagina delle informazioni php nel tuo browser web andando al nome di dominio del tuo server o all'indirizzo IP pubblico seguito da /info.php come mostrato nell'immagine qui sotto.

https://www.example.com/info.php

o

http://192.168.0.100/info.php

Puoi anche verificare se il protocollo HTTP/2.0 è pubblicizzato dal server cercando la riga $_SERVER['SERVER_PROTOCOL'] su variabili PHP.

Per installare altri moduli PHP7.3, esegui la ricerca apt php7.3 comando per trovare un modulo PHP specifico e installarlo. Se hai intenzione di installare un sistema di gestione dei contenuti, come WordPress, installa questi moduli aggiuntivi:

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

Tuttavia, i moduli PHP appena installati non sono abilitati per impostazione predefinita sul tuo sistema. Per attivarli, riavvia il servizio PHP-FPM.

sudo systemctl restart php7.3-fpm.service

Fase 5:installa il database MariaDB

Infine, nel database manca l'ultimo pezzo del puzzle stack LAMP. Il componente LEMP del database MariaDB viene utilizzato per archiviare i record in tabelle e colonne. Gestirà dinamicamente i dati di un'applicazione web. Per installare MariaDB, esegui il seguente comando nella console del tuo server. Quindi, riavvia il demone PHP FPM per abilitare il modulo PHP-MySQL necessario per accedere al database.

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

Per impostazione predefinita, l'account root del sistema o gli utenti con privilegi di root possono accedere al database senza fornire una password. Per modificare questo comportamento in modo che MySQL richieda una password ogni volta che un utente del sistema tenta di accedere al database, accedi al database MySQL utilizzando l'interfaccia della riga di comando con privilegi di root ed esegui i seguenti comandi nella console MySQL:

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

Imposta la password di root in MariaDB

Nel passaggio successivo, assicurati di proteggere MariaDB eseguendo lo script di sicurezza mysql_secure_installation. È fornito dal pacchetto di installazione dai repository Debian. Durante l'esecuzione lo script porrà una serie di domande progettate per proteggere il database di MariaDB. Ad esempio:per modificare la password di root MySQL, rimuovere utenti anonimi, disabilitare gli accessi root remoti ed eliminare il database di test. Esegui lo script eseguendo il comando seguente. Rispondi di sì a tutte le domande poste per proteggere completamente il demone MySQL. Usa l'output dello script seguente tranne che come guida.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Infine, per testare la funzionalità di MariaDB, accedi al database dalla console ed esegui il comando seguente. Un elenco dei database predefiniti dovrebbe essere visualizzato nella console di MariaDB. Esci dalla console MariaDB con exit dichiarazione.

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

È tutto! Il server web Nginx, il database MariaDB e il linguaggio di programmazione PHP sono installati sulla tua macchina Debian 10. Ora puoi iniziare a creare siti Web dinamici o applicazioni Web per i tuoi visitatori.


Debian
  1. Installa Lets Encrypt e Secure Nginx con SSL/TLS in Debian 9

  2. Come installare Nginx con PHP e MySQL (stack LEMP) su Ubuntu 18.04

  3. Come installare e configurare PHP e Nginx (LEMP) su Debian 11

  4. Come installare e configurare il server LEMP (Nginx, MySQL e PHP) su un VPS Debian 6 (squeeze)

  5. Come installare LEMP Stack Nginx, MySQL, PHP su Debian 11

Come installare Nginx con PHP + MySQL (LEMP) su Debian 9

Come installare Grav CMS con Nginx su Debian 9

Come installare Nginx, MariaDB, PHP (stack LEMP) su Debian 9

Come installare Nginx con PHP-FPM su Debian 10

Come installare LEMP WordPress Ubuntu e Debian con Virtualhost

Come installare phpBB con LEMP (Nginx, MariaDB e PHP) su Debian 11 Bullseye