Server Dedicati & VPS22 gennaio 2026 159 visualizzazioni

Come installare Nginx e PHP-FPM su un VPS

Come installare Nginx e PHP-FPM su un VPS

Distribuzione di uno Stack Web Performante: Nginx & PHP 8.2 FPM

Questa guida ti accompagna nell'installazione di un ambiente server robusto e sicuro su un VPS, ideale per ospitare framework moderni come Laravel, Symfony o CMS come WordPress.

🎯 Obiettivi della configurazione

  • Server Web: Nginx (alte prestazioni per connessioni simultanee).
  • Motore PHP: PHP 8.2 tramite FPM (FastCGI Process Manager).
  • Sicurezza: HTTPS tramite Let's Encrypt, firewall UFW e protezione contro il brute-force.
  • Ottimizzazione: Cache statica e gestione pulita dei diritti di accesso.

📋 Requisiti

  • Un server con Debian 12 o Ubuntu 22.04+.
  • Accesso SSH con privilegi sudo.
  • Un nome di dominio il cui record "A" punta all'IP del tuo server.

Passo 1: Preparazione e installazione di Nginx

Inizia aggiornando l'elenco dei pacchetti e installa il server web.

# Aggiornamento del sistema
sudo apt update && sudo apt upgrade -y

# Installazione e attivazione di Nginx
sudo apt install -y nginx
sudo systemctl enable --now nginx

Configurazione del Firewall (UFW): Consenti il traffico web affinché il tuo sito sia accessibile.

sudo ufw allow "Nginx Full"

Passo 2: Installazione e ottimizzazione di PHP 8.2

Installiamo PHP 8.2 con le estensioni essenziali per la maggior parte delle applicazioni moderne.

# Installazione di PHP-FPM e dei moduli comuni
sudo apt install -y php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl \
  php8.2-xml php8.2-gd php8.2-zip php8.2-mbstring php8.2-intl

🔒 Sicurezza di PHP

Per impostazione predefinita, PHP può tentare di eseguire il file più vicino se non trova il file esatto richiesto. Disattiviamo questo comportamento rischioso:

# Disattivazione di cgi.fix_pathinfo
sudo sed -i 's/^\s*;*\s*cgi.fix_pathinfo\s*=.*/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
sudo systemctl restart php8.2-fpm

Passo 3: Struttura dei file e permessi

Creeremo una cartella dedicata al tuo sito e applicheremo permessi restrittivi ma funzionali. Sostituisci mon-domaine.com con il tuo dominio reale.

# Creazione della struttura
sudo mkdir -p /var/www/mon-domaine.com/public

# Assegnazione della proprietà all'utente web (www-data)
sudo chown -R www-data:www-data /var/www/mon-domaine.com

# Sicurezza dei permessi (Cartelle a 750, File a 640)
sudo find /var/www/mon-domaine.com -type d -exec chmod 750 {} \;
sudo find /var/www/mon-domaine.com -type f -exec chmod 640 {} \;

Passo 4: Configurazione del Virtual Host Nginx

Crea un file di configurazione pulito per indicare a Nginx come gestire le richieste verso il tuo dominio.

sudo nano /etc/nginx/sites-available/mon-domaine.com

Copia questo blocco di configurazione:

server {
    listen 80;
    server_name mon-domaine.com www.mon-domaine.com;
    root /var/www/mon-domaine.com/public;
    index index.php index.html;

    # Gestione degli URL puliti (Laravel/Symfony)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Esecuzione dei file PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # Ottimizzazione della cache per i file statici
    location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp)$ {
        expires 7d;
        access_log off;
        add_header Cache-Control "public";
    }

    # Vietare l'accesso ai file nascosti (.env, .git, ecc.)
    location ~ /\. {
        deny all;
    }
}

Attivazione del sito:

sudo ln -s /etc/nginx/sites-available/mon-domaine.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Passo 5: Sicurezza HTTPS (Certbot)

Passare a HTTPS è indispensabile oggi. Let's Encrypt consente di automatizzarlo gratuitamente.

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d mon-domaine.com -d www.mon-domaine.com

Passo 6: Manutenzione e Sicurezza avanzata

🛡️ Protezione contro gli attacchi

Installa Fail2ban per bannare automaticamente gli IP che tentano di forzare i tuoi accessi SSH o web.

sudo apt install -y fail2ban

🔍 Risoluzione rapida dei problemi (Troubleshooting)

SintomoProbabile causaAzione
Errore 502 Bad GatewayPHP-FPM è fermo o il socket è errato.sudo systemctl status php8.2-fpm
Errore 403 ForbiddenPermessi errati sulle cartelle o indice mancante.Controllare chown e la cartella /public
Pagina PHP scaricataIl blocco location ~ \.php$ è mancante.Controllare la configurazione Nginx e ricaricare.

💡 Varianti (Distribuzioni RHEL / Rocky Linux)

Se sei su una base RedHat, usa dnf. Il socket PHP si trova generalmente qui: fastcgi_pass unix:/run/php-fpm/www.sock;