Decidi tu quali servizi possiamo attivare per analisi, personalizzazione e contenuti esterni.
Utilizziamo cookie e tecnologie simili sul nostro sito web per personalizzare i contenuti, integrare media esterni e comprendere meglio l'utilizzo delle singole sezioni.
Cookie necessari
Queste voci garantiscono funzioni di base come sicurezza, stabilità e gestione dei moduli.
Il trattamento dei dati può avvenire con il tuo consenso o sulla base di interessi legittimi. Nelle impostazioni dei cookie puoi negare il consenso a ciascuna categoria facoltativa o autorizzarla singolarmente.
Alcuni servizi trattano dati personali in Paesi terzi. Con il tuo consenso, accetti anche questo trasferimento. Trovi maggiori informazioni nella nostra informativa sulla privacy.
Potrai riaprire e modificare la tua selezione in qualsiasi momento. · 1.0.2
Configurare uno stack LEMP su un Server VPS Linux – Distribuire applicazioni web ad alte prestazioni
Scopri come configurare uno stack LEMP per ospitare siti web PHP dinamici su server VPS Linux → Scopri di più
10 novembre 20268 min di lettura1 Visualizzazioni0 utile
Introduzione
Lo stack LEMP è una popolare combinazione di software open source che viene configurata per consentire di ospitare facilmente siti web dinamici, con particolare attenzione a siti web e app PHP. L'acronimo sta per: Linux come sistema operativo, "Engine x" (nginx) come server web, MySQL come database e, infine, PHP per l'elaborazione. In questa guida ti mostriamo come configurare uno stack LEMP su un VPS Linux, con una spiegazione dettagliata passo dopo passo e un esempio di sito web con una lista di cose da fare.
FAQ
Domande frequenti
Linux come sistema operativo, Engine x (nginx) come server web, MySQL come database e PHP per l'elaborazione: una combinazione software molto diffusa per ospitare siti web PHP dinamici.
Ubuntu. I comandi sono identici per Debian e dovrebbero essere simili anche per altre distribuzioni, anche se la sintassi può variare leggermente.
Connettiti al server tramite SSH e aggiorna tutti i pacchetti con il comando appropriato, ad esempio sudo apt update su Ubuntu o Debian.
Esegui sudo apt install nginx. Poi configura le regole firewall necessarie per rendere il server web accessibile da Internet.
Feedback
Questo articolo ti è stato utile?
Il tuo feedback ci aiuta a definire le priorità e a migliorare i contenuti.
0 di 0 I feedback hanno giudicato utile questo articolo.
Assistenza personale
Le istruzioni non sono sufficienti?
Il supporto ZAP conosce il tuo prodotto: descrivi brevemente la tua richiesta e ti aiuteremo personalmente.
Navigazione
VPS
Preparazione
Per prima cosa, connettiti al tuo server tramite SSH. Se non sai come fare, consulta la nostra guida Primo accesso (SSH).
In questa guida utilizziamo Ubuntu come distribuzione Linux. I comandi sono identici per Debian e dovrebbero essere simili anche per altre distribuzioni, anche se la sintassi potrebbe variare leggermente. Assicurati che sia installato un sistema operativo e di essere connesso tramite SSH.
Come sempre, prima dell'installazione dovresti aggiornare tutti i pacchetti all'ultima versione con il seguente comando:
L'installazione può essere suddivisa nelle singole componenti principali dello stack LEMP, iniziando dal server web Nginx, seguito dal database MySQL e infine da PHP. Durante l'installazione configureremo un sito web di prova scritto in PHP che accede al database MySQL. Ogni richiesta web verrà quindi elaborata e servita tramite il server web Nginx.
Configurare Nginx
Nginx è il server web che elabora le richieste web in entrata e invia le risposte. Installalo con il seguente comando:
Code
sudo apt install nginx
Dopo l'installazione, assicurati di creare le regole firewall necessarie per rendere il server web accessibile da Internet. In questo esempio utilizziamo il firewall UFW, poiché Nginx dispone di un'applicazione registrata.
Se utilizzi un altro firewall, assicurati che la porta 80 (HTTP) sia aperta. Per ulteriori informazioni sui firewall in Linux, consulta la nostra guida Gestire il firewall.
Attiva il firewall UFW e crea una regola per SSH:
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Attenzione
Se utilizzi UFW, assicurati di aver configurato una regola per SSH! In caso contrario, se la sessione attuale si interrompe, non potrai più connetterti al server tramite SSH!
Ora crea la regola per Nginx e verifica che le regole siano presenti:
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Suggerimento
Con il comando ufw app list puoi visualizzare i profili disponibili. Nell'esempio precedente, Nginx Full consente il traffico sia HTTP (porta 80) sia HTTPS (porta 443).
Dovresti vedere le regole Nginx e Nginx (v6) con lo stato ALLOW, a conferma che il firewall è configurato correttamente. Vedrai anche le altre regole che potresti aver già configurato, inclusa quella per SSH.
Dopo aver aperto il firewall per Nginx, verifica che Nginx funzioni. Apri il browser e inserisci il tuo indirizzo IP, ad esempio: http://[deine_ipadresse]
Se tutto funziona, dovresti visualizzare una pagina di benvenuto predefinita. In caso contrario, controlla lo stato del servizio con: systemctl status nginx
Configurare MySQL
Ora installerai e configurerai un server MySQL che fungerà da database per archiviare i dati relazionali in modo permanente. Installalo con:
Code
sudo apt install mysql-server
Dopo l'installazione, ti consigliamo di eseguire lo script di sicurezza per proteggere il server MySQL. È facoltativo, ma altamente consigliato. Avvialo con:
Code
sudo mysql_secure_installation
Lo script ti guiderà interattivamente nella configurazione. Per prima cosa ti verrà chiesto di impostare la convalida delle password. Ti consigliamo di scegliere Y, in modo da consentire solo password sicure in futuro, quindi di selezionare MEDIUM con 1 oppure STRONG con 2.
Successivamente, ti verrà chiesto se rimuovere l'utente anonymous e disattivare l'accesso remoto di root. Per motivi di sicurezza, ti consigliamo di confermare entrambe le opzioni con Y. In questo modo verrà rimosso l'utente di prova e l'accesso root sarà possibile solo localmente tramite SSH, riducendo al minimo i rischi.
Infine, ti verrà chiesto se eliminare il database test e ricaricare le tabelle dei privilegi. Anche in questo caso ti consigliamo di scegliere Y, perché il database di prova non è necessario e le tabelle dei privilegi devono essere ricaricate per applicare le modifiche.
Ora verifica che il database MySQL sia in esecuzione accedendovi con il seguente comando: sudo mysql -u root. Se tutto è andato a buon fine, verrà visualizzato un messaggio di benvenuto. Puoi uscire dalla shell MySQL con quit.
Configurare PHP
L'ultima componente dello stack LEMP è PHP. Con Nginx viene utilizzato il programma esterno php-fpm (PHP FastCGI Process Manager). Nginx verrà configurato per inoltrare le richieste a php-fpm, che le elaborerà prima che vengano servite.
Installa l'ultima versione di php-fpm e il plugin PHP-MySQL con:
Code
sudo apt install php-fpm php-mysql
Verifica che l'installazione sia riuscita controllando la versione di PHP. Se viene visualizzata una versione, PHP funziona correttamente:
Code
php -v
Suggerimento
Estensioni PHP
Per casi d'uso avanzati potresti aver bisogno di ulteriori estensioni PHP. Puoi visualizzare un elenco con apt search php- | less.
Usa i tasti freccia per scorrere e Q per uscire. Per installare un'estensione, usa semplicemente:
Code
sudo apt install [php_erweiterung] [...]
Puoi installare più estensioni contemporaneamente separandole con degli spazi.
Creare un sito web di prova
Dopo aver installato tutte le componenti dello stack LEMP, creeremo un sito web di prova per mostrare come collaborano e consentono di realizzare un sito dinamico. Questo passaggio è facoltativo, ma utile per capire come configurare i tuoi siti web.
In questo esempio realizzeremo una piccola lista di cose da fare in PHP che recupera e visualizza le voci da un database MySQL. Il sito web verrà servito tramite Nginx.
Come esempio utilizziamo il dominio zapdocs.example.com, poiché nella pratica probabilmente utilizzerai un dominio. Devi necessariamente creare un record DNS A per il dominio, che punti all'indirizzo IP del tuo server. Per assistenza, consulta la nostra guida Record di dominio.
Info
Puoi procedere anche senza un dominio e sostituire [your_domain] con un nome qualsiasi. In tal caso, accederai al sito web tramite l'indirizzo IP. Tieni presente, però, che in seguito dovrai rimuovere la riga server_name dal file del blocco server.
Configurare Nginx
Di norma, i server web memorizzano tutti i file dei siti web nella directory /var/www. Per impostazione predefinita, Nginx contiene una cartella html con una pagina standard. Per mantenere tutto in ordine, soprattutto se ospiti più siti web, ti consigliamo di creare una cartella separata per ogni sito.
Crea quindi una nuova cartella in /var/www/[your_domain]. Nel nostro esempio, il percorso è /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Ora crea un nuovo file di configurazione del blocco server Nginx per questo dominio nella directory sites-available:
Versione di PHP
Importante: sostituisci [your_phpversion] con la versione di PHP attualmente installata. Verificala con php -v, ad esempio PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
In questo esempio la versione è 8.3, quindi la riga sarà: fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Questo file del blocco server gestisce le richieste sulla porta 80 (HTTP) e verifica se corrispondono al valore specificato in server_name, ovvero al tuo dominio. Inoltre, fa riferimento alla cartella /var/www/[your_domain] che hai creato in precedenza, da cui verranno serviti i file.
Salva il file e chiudi Nano premendo CTRL + X, poi Y per confermare e infine ENTER.
Attiva la configurazione creando un collegamento simbolico nella directory sites-enabled:
Se non utilizzi un dominio
Se non utilizzi un dominio, rimuovi o commenta la riga server_name (aggiungendo # all'inizio). Dovresti inoltre disattivare il blocco server predefinito con:
Code
sudo unlink /etc/nginx/sites-enabled/default
Ti consigliamo di verificare la sintassi con il seguente comando:
Code
sudo nginx -t
Riavvia Nginx per applicare le modifiche:
Code
sudo systemctl reload nginx
Creare il sito web
Dopo aver configurato Nginx, creeremo il sito web vero e proprio che verrà servito. Al momento la cartella è vuota, quindi non verrà visualizzato nulla. Come descritto sopra, realizzeremo una piccola lista di cose da fare.
Preparare il database
Accedi al tuo server MySQL:
Code
sudo mysql -u root
Crea un nuovo database todowebsite e al suo interno una tabella todoitems:
Code
# Datenbank erstellen
CREATE DATABASE todowebsite;
# Datenbank auswählen
USE todowebsite;
# Tabelle erstellen
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Aggiungi alcune voci di esempio:
Code
INSERT INTO todoitems (name, is_completed) VALUES ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 0);
Crea un utente dedicato todo per il sito web:
Code
# Benutzer erstellen
# Ersetze [your_password] durch dein eigenes Passwort
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# Rechte vergeben (alles in einer Zeile kopieren)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# Rechte neu laden
FLUSH PRIVILEGES;
Esci dalla shell MySQL con quit.
File PHP del sito web
Ora creeremo il file PHP vero e proprio per la pagina della lista di cose da fare. Apri l'editor Nano:
Code
sudo nano /var/www/[your_domain]/index.php
Inserisci il codice seguente. Il primo blocco PHP stabilisce la connessione a MySQL.
Importante
Sostituisci [your_password] con la password che hai assegnato all'utente todo.
La parte HTML visualizza la lista recuperando i dati dal database.
Code
<?php
// MySQL-Verbindung vorbereiten
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen, bei Fehler abbrechen
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL-Abfrage ausführen und Ergebnis speichern
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do Liste</title>
</head>
<body>
<h1>Coole To-Do Liste :D</h1>
<p>Für unseren tollen ZAP-Hosting Guide: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack</a></p>
<ul>
<?php
// Prüfen, ob Ergebnisse vorhanden sind
if ($result->num_rows > 0) {
// Durch alle Einträge iterieren
foreach ($result as $entry) {
echo "<li>";
// Name anzeigen, htmlspecialchars schützt vor XSS
echo htmlspecialchars($entry["name"]);
// Status anzeigen
if ($entry["is_completed"]) {
echo " <strong>(Abgeschlossen)</strong>";
} else {
echo " <strong>(Offen)</strong>";
}
// Erstellungsdatum anzeigen
echo " - Erstellungsdatum: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// Falls keine Einträge vorhanden sind
echo "<li>Keine To-Do Einträge gefunden.</li>";
}
?>
</ul>
</body>
</html>
<?php
// Verbindung schließen
$conn->close();
?>
Salva il file e chiudi Nano premendo CTRL + X, poi Y e ENTER.
Testare il sito web
Hai configurato correttamente un sito web di prova con una lista di cose da fare che utilizza tutte le componenti dello stack LEMP!
Ora dovresti poter raggiungere il sito web tramite il dominio (porta 80 / http) che hai definito nel blocco server; nel nostro esempio, zapdocs.example.com. Il risultato dovrebbe apparire così:
Conclusione
Congratulazioni, hai installato e configurato correttamente lo stack LEMP! Come prossimo passaggio, ti consigliamo vivamente di configurare un dominio e un certificato SSL, così da proteggere la trasmissione dei tuoi dati. Consulta la nostra guida a Certbot, dedicata al plugin Nginx, e segui la procedura interattiva per ottenere in modo semplice e rapido un certificato per il tuo dominio.
Il nostro team di assistenza è a tua disposizione ogni giorno per rispondere a domande o aiutarti in caso di problemi: non esitare a contattarci! 🙂
Hosting server da 2,49 € / mese, subito online, protezione DDoS inclusa.