VPS Ubuntu per WordPress: setup completo con Nginx e PHP 8.3

19 agosto 20266 minGuide
In breveAI

Setup completo VPS Ubuntu 24.04 con stack Nginx, PHP 8.3, MariaDB per WordPress: configurazione sicura, ottimizzata e production-ready con SSL e hardening.

Prerequisiti e preparazione del VPS

Prima di iniziare il setup, assicurati di avere un VPS Ubuntu 24.04 LTS con almeno 2GB di RAM e accesso root via SSH. Per questa guida utilizziamo PHP 8.3, che offre performance superiori del 15-20% rispetto a PHP 8.1 e include miglioramenti significativi per WordPress.

Requisiti minimi consigliati per gestire fino a 10 siti WordPress:

  • 2 core CPU
  • 4GB RAM
  • 50GB SSD storage
  • Connessione SSH con chiave pubblica
  • Dominio configurato con DNS puntato all’IP del VPS

Primo passo: aggiorna il sistema e configura il firewall base.

sudo apt update && sudo apt upgrade -y
sudo apt install ufw -y
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Configura anche fail2ban per proteggere SSH da attacchi brute force:

sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Installazione e configurazione di Nginx

Nginx è la scelta ottimale per WordPress su VPS grazie al consumo ridotto di memoria e alle performance superiori con contenuti statici. Nel 2026, oltre il 45% dei top 10k siti WordPress utilizzano Nginx.

sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Crea una configurazione base ottimizzata per WordPress in /etc/nginx/sites-available/wordpress:

server {
    listen 80;
    server_name tuodominio.it www.tuodominio.it;
    root /var/www/tuodominio.it;
    index index.php index.html;

    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        log_not_found off;
        access_log off;
    }

    location ~* \.(css|gif|ico|jpeg|jpg|js|png|webp|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

Attiva il sito e testa la configurazione:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Ottimizzazioni Nginx per WordPress

Modifica /etc/nginx/nginx.conf per migliorare le performance:

  • Aumenta worker_connections a 2048
  • Abilita gzip con livello 6
  • Configura fastcgi_cache per ridurre il carico PHP
  • Imposta keepalive_timeout a 30 secondi

Installazione PHP 8.3 e estensioni necessarie

PHP 8.3 introduce ottimizzazioni JIT migliorate e riduzione del consumo memoria fino al 10%. Per WordPress è necessario installare le estensioni corrette.

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-xmlrpc php8.3-zip php8.3-imagick php8.3-intl php8.3-redis -y

Configura PHP-FPM per ottenere performance ottimali. Modifica /etc/php/8.3/fpm/pool.d/www.conf:

pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500

Ottimizza /etc/php/8.3/fpm/php.ini per WordPress:

  • memory_limit = 256M
  • upload_max_filesize = 64M
  • post_max_size = 64M
  • max_execution_time = 300
  • opcache.enable = 1
  • opcache.memory_consumption = 128
  • opcache.interned_strings_buffer = 16
  • opcache.max_accelerated_files = 10000
sudo systemctl restart php8.3-fpm

Installazione e configurazione MariaDB

MariaDB 11.x offre performance migliori rispetto a MySQL per WordPress, con query fino al 25% più veloci su operazioni complesse.

sudo apt install mariadb-server -y
sudo systemctl enable mariadb
sudo mysql_secure_installation

Durante mysql_secure_installation configura:

  1. Imposta password root robusta
  2. Rimuovi utenti anonimi: Y
  3. Disabilita login root remoto: Y
  4. Rimuovi database di test: Y
  5. Ricarica privilegi: Y

Crea database e utente per WordPress:

sudo mysql -u root -p

CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'password_sicura_qui';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Ottimizzazioni MariaDB

Crea /etc/mysql/mariadb.conf.d/60-wordpress.cnf:

[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_type = 1
query_cache_size = 64M
sudo systemctl restart mariadb

Installazione WordPress e configurazione SSL

Scarica e configura WordPress:

sudo mkdir -p /var/www/tuodominio.it
cd /var/www/tuodominio.it
sudo wget https://it.wordpress.org/latest-it_IT.tar.gz
sudo tar -xzf latest-it_IT.tar.gz --strip-components=1
sudo rm latest-it_IT.tar.gz
sudo chown -R www-data:www-data /var/www/tuodominio.it
sudo find /var/www/tuodominio.it -type d -exec chmod 755 {} \;
sudo find /var/www/tuodominio.it -type f -exec chmod 644 {} \;

Configura wp-config.php con salt keys da https://api.wordpress.org/secret-key/1.1/salt/.

Certificato SSL con Let’s Encrypt

Certbot automatizza il rinnovo SSL. Installalo e configura HTTPS:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tuodominio.it -d www.tuodominio.it

Certbot modifica automaticamente la configurazione Nginx per HTTPS. Verifica il rinnovo automatico:

sudo certbot renew --dry-run

Sicurezza e hardening finale

Implementa misure di sicurezza aggiuntive per proteggere il VPS e WordPress:

  • Disabilita accesso SSH come root: modifica /etc/ssh/sshd_config con PermitRootLogin no
  • Configura backup automatici giornalieri con cron
  • Installa e configura ModSecurity per Nginx
  • Limita tentativi di login WordPress con plugin o Nginx rate limiting
  • Monitora log con logwatch o strumenti esterni

Configura rate limiting su wp-login.php in Nginx:

limit_req_zone $binary_remote_addr zone=wplogin:10m rate=2r/m;

location = /wp-login.php {
    limit_req zone=wplogin;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}

Monitoring e manutenzione

Installa strumenti per monitorare performance e uptime:

sudo apt install htop iotop nethogs -y

Per chi gestisce più siti client, strumenti come AgencyPilot centralizzano il monitoraggio di tutti i VPS da un’unica dashboard.

Performance finali e benchmark

Con questa configurazione, aspettati performance significative:

  • TTFB medio sotto 200ms per pagine non cachate
  • Score Lighthouse 95+ su performance
  • Gestione di 500+ richieste/secondo con cache attiva
  • Consumo RAM sotto 1GB con 5 siti WordPress attivi

Testa le performance con:

ab -n 1000 -c 10 https://tuodominio.it/

Ottimizza ulteriormente installando Redis per object caching e Cloudflare per CDN globale.

FAQ

Perché scegliere Nginx invece di Apache per WordPress?

Nginx consuma il 60% in meno di memoria rispetto ad Apache con configurazioni simili e gestisce meglio i picchi di traffico. Per VPS con risorse limitate è la scelta ottimale. Inoltre, la configurazione di cache e rate limiting è più semplice e performante.

PHP 8.3 è compatibile con tutti i plugin WordPress?

A maggio 2026, oltre il 98% dei plugin nel repository ufficiale WordPress è compatibile con PHP 8.3. Prima di aggiornare un sito in produzione, testa sempre in ambiente staging. I pochi plugin incompatibili sono generalmente abbandonati da anni e andrebbero sostituiti per motivi di sicurezza.

Quanti siti WordPress posso ospitare su un VPS da 4GB RAM?

Con la configurazione descritta, puoi gestire comodamente 8-12 siti WordPress di piccole-medie dimensioni (fino a 50k pageviews/mese ciascuno). Con Redis object cache e FastCGI cache attivo, anche 15-20 siti a basso traffico. Monitora sempre RAM e CPU per evitare overload.

Come automatizzare i backup del VPS?

Configura un cron job che esegue backup giornalieri con rsync o duplicity verso storage esterno (S3, Backblaze B2). Per maggiore sicurezza, usa strumenti come UpdraftPlus o BackWPup per backup WordPress specifici, o gestisci tutto centralmente con piattaforme come AgencyPilot che automatizzano backup multi-sito.

È necessario Redis per un singolo sito WordPress?

Per un singolo sito con traffico medio (sotto 10k visite/giorno), Redis object cache non è strettamente necessario. Diventa molto utile con WooCommerce, plugin che generano molte query non cachate, o quando gestisci più siti sullo stesso VPS. L’overhead di Redis è minimo (circa 50MB RAM) e i benefici crescono con la complessità del sito.

Gestisci i siti WordPress dei tuoi clienti?

AgencyPilot ti dà report AI, uptime monitoring, backup e portale clienti in un’unica dashboard. Gratis per 3 siti.

Prova gratis
Leggi anche
Tutti gli articoli
Tutti gli articoli